home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 2: CDPD 1 / Almathera Ten on Ten - Disc 2: CDPD 1.iso / pd / 276-300 / 288 / plotdata2d / plotdata2d.for < prev    next >
Text File  |  1995-03-14  |  150KB  |  3,353 lines

  1.     Program PlotData2D
  2. C
  3. C======================================================================C
  4. C                                                                      C
  5. C    PlotData2D - two-dimensional data plotting package             C
  6. C                                                                      C
  7. C======================================================================C
  8. C                                                                      C
  9. C    Author: Robert C. Singleterry Jr.                              C
  10. C    Home Address:            School Address:                C
  11. C    365 Carol Ave.            1526 N. Santa Rita             C
  12. C    Idaho Falls, ID  83401        Tucson, AZ  85719              C
  13. C                                                                      C
  14. C    Origin Date: 11/01/89                                          C
  15. C    Lastest Update: 11/01/89                                       C
  16. C    Current Revision: 1.0                                          C
  17. C    Language: AC/FORTRAN V2.3                                      C
  18. C    (need this compiler to recompile the program)                  C
  19. C                                                                      C
  20. C======================================================================C
  21. C                                                                      C
  22. C Purpose:                                                             C
  23. C                                                                      C
  24. C    This program plots data onto a custom user defined screen and  C
  25. C    window using standard Amiga functions from AC/FORTRAN V2.3.    C
  26. C    The plot and screen/window definitions along with the (X,Y)    C
  27. C    data pairs are read in from a disk file.  In this revision,    C
  28. C    the disk file name is input through the command line           C
  29. C    interface.  The package supports linear, log-log, and          C
  30. C    semi-log axis plots.  The data can be plotted with lines,      C
  31. C    symbols, or lines and symbols.  As of now, all plots on one    C
  32. C    screen  must be the same.  See the examples on the              C
  33. C    distribution disk on exactly how to set up your data file.     C
  34. C    Preambles are included for the three axis types; however,      C
  35. C    the other options are what I use most often, which maybe       C
  36. C    the exact opposite of what you need.                           C
  37. C                                                                      C
  38. C    Many "extras" have been included:                              C
  39. C                                                                      C
  40. C    * Automatic axis size determination with some extra room       C
  41. C    * Border between the data and the axis                         C
  42. C    * Ability to access the screen depth gadget                    C
  43. C    * User defined Screen and Window dimensions                    C
  44. C    * Automatic value labeling on both axis                        C
  45. C    * User defined axis labels and plot title                      C
  46. C    * All border values are user defined                           C
  47. C    * Draws the coordinate axis on the graph                       C
  48. C                                                                      C
  49. C    Many "extras" will be include soon (see wish list).  Hopefully C
  50. C    another revision will be out before Jan. 1 1990!! (I also      C
  51. C    have to get my Master's thesis approved by then, so...).       C
  52. C                                                                      C
  53. C    This release is the basis to work from.  It is not intended    C
  54. C    to be a final release.  Please, if you have any comments,      C
  55. C    complaints, bugs, code, etc..., write me!!  Thanks.            C
  56. C                                                                      C
  57. C    Also, I am not too sure about what must be done to release     C
  58. C    this program to the general public?  AC/FORTRAN runtime        C
  59. C    library package problems.  However, I do know for a fact that  C
  60. C    using any or all of this program in a for-profit package will  C
  61. C    get you a visit from me and my BIG brother.  If you would like C
  62. C    to use any or all of this package in a public domain type      C
  63. C    program, remember to place somewhere in your program who       C
  64. C    actually sweated out the code!!!  Thanks                       C
  65. C                                                                      C
  66. C======================================================================C
  67. C                                                                      C
  68. C Usage:                                                               C
  69. C                                                                      C
  70. C    1> alias pd execute <volume:directory>plotdata2d.com           C
  71. C    1> pd <filename>                                               C
  72. C    1> pd h (to get help)                                          C
  73. C                                                                      C
  74. C    Note - DO NOT press <ctrl-C>.  To exit the program, activate   C
  75. C        the CLOSEWINDOW gadget.  Also do not execute the       C
  76. C        program directly.  Your individual stack size may not  C
  77. C        be large enough and a visit from the GURU may be next  C
  78. C        on the your hit parade.                                C
  79. C                                                                      C
  80. C======================================================================C
  81. C                                                                      C
  82. C Data Input:                                                          C
  83. C                                                                      C
  84. C    Command line: Data file name                                   C
  85. C                                                                      C
  86. C    Data file name: The data layout is as follows:                 C
  87. C                                                                      C
  88. C     1 - Screen height                                             C
  89. C     2 - Screen width                                              C
  90. C     3 - Window height                                             C
  91. C     4 - Window width                                              C
  92. C     5 - Window title (80 characters)                              C
  93. C     6 - X axis label (60 characters)                              C
  94. C     7 - Y axis label (60 characters)                              C
  95. C     8 - Left, Right, Top, Bottom axis offset from edge of window  C
  96. C     9 - Left, Right, Top, Bottom plot offset from item 8          C
  97. C    10 - User maximum refinement value                             C
  98. C    11 - User minimum refinement value                             C
  99. C    12 - Grid flag -> 0: No grid lines, 1: Grid lines              C
  100. C    13 - Plot type -> 0: Linear, 1: Log, 2: Semilog                C
  101. C    14 - Symbol flag -> 0: No symbols, 1: Symbols                  C
  102. C    15 - Line flag -> 0: No lines, 1: Draw lines                   C
  103. C    16 - Data Seperator -> The number that is used to              C
  104. C        seperate the lines from one another                    C
  105. C    17 - Plot data in X Y pairs with the plot lines                C
  106. C        seperated by data item 16                              C
  107. C                                                                      C
  108. C======================================================================C
  109. C                                                                      C
  110. C Variables:                                                           C
  111. C                                                                      C
  112. C Integer                                                              C
  113. C    s_h - User input - screen height in pixels.                    C
  114. C    s_w - User input - screen width in pixels.                     C
  115. C    s_d - Screen depth (# of colors available for output) which    C
  116. C        is determined at runtime.                              C
  117. C    w_h - User input - window height in pixels.  The top-left      C
  118. C        edge is hardcoded at (0,1), so a value of 400 in       C
  119. C         interlace mode is okay.                               C
  120. C    w_w - User input - window width in pixels.                     C
  121. C    lefoff - User input - offset between the left edge of the      C
  122. C        window and the left axis in pixels.                    C
  123. C    rigoff - User input - offset between the right edge of the     C
  124. C        window and the right axis in pixels.                   C
  125. C    topoff - User input - offset between the top edge of the       C
  126. C        SCREEN and the top axis in pixels.                     C
  127. C    botoff - User input - offset between the bottom of the         C
  128. C        window and the bottom axis in pixels.                  C
  129. C    user_max - User input - refines the distance between the top   C
  130. C        of the maximum point and the border of the plot.       C
  131. C    user_min - User input - refines the distance between the bottomC
  132. C        of the maximum point and the border of the plot.       C
  133. C    grid - User input - flag for use of grid line: 0 - No, 1 - Yes C
  134. C    xtype - Determined from user input - plot type of the X axis:  C
  135. C        0 - Linear, 1 - Log.                                   C
  136. C    ytype - Determined from user input - plot type of the Y axis:  C
  137. C        0 - Linear, 1 - Log.                                   C
  138. C    symdraw - User input - Flag to determine whether to draw       C
  139. C        symbols at the data points or not: 0 - No, 1 - Yes.    C
  140. C    line - Determined from user input - number of lines to plot.   C
  141. C    pts - Determined from user input - number of points per line.  C
  142. C    linedraw - Determined from user input - flag to determine      C
  143. C        whether to draw a line between points or not:          C
  144. C        0 - No, 1 - Yes.                                       C
  145. C    RP - Raster port pointer.                                      C
  146. C    pixels - The pixel locations of the tick marks.                C
  147. C    p_loff - The offset between the left edge and the left         C
  148. C        plot boundary in pixels.                               C
  149. C    p_roff - The offset between the right axis and the right       C
  150. C        plot boundary in pixels.                               C
  151. C    p_toff - The offset between the top axis and the top           C
  152. C        plot boundary in pixels.                               C
  153. C    p_boff - The offset between the bottom axis and the bottom     C
  154. C        plot boundary in pixels.                               C
  155. C    gridline - The color number of the grid lines.                 C
  156. C    lefpt - User input - the number of pixels between the left     C
  157. C        axis and left plot boundary.                           C
  158. C    rigpt - User input - the number of pixels bewteen the right    C
  159. C        axis and the right plot boundary.                      C
  160. C    toppt - User input - the number of pixels between the top      C
  161. C        axis and the top plot boundary.                        C
  162. C    botpt - User input - the number of pixels between the bottom   C
  163. C        axis and the bottom plot boundary.                     C
  164. C    Window - The address of the window structure.                  C
  165. C    Screen - The address of the screen structure.                  C
  166. C    i - Do loop indexing variable.                                 C
  167. C    j - Do loop indexing variable.                                 C
  168. C    Error - A variables to hold the error number returned from     C
  169. C        a subroutine.                                          C
  170. C                                                                      C
  171. C Integer*1                                                            C
  172. C    Errval - A byte variable used to hold integer or real error    C
  173. C        return values.                                         C
  174. C                                                                      C
  175. C Integer*4                                                            C
  176. C    Ierr - The integer return error value - see Errval.            C
  177. C                                                                      C
  178. C Real                                                                 C
  179. C    MaxX - The maximum X value.                                    C
  180. C    MaxY - The maximum Y value.                                    C
  181. C    MinX - The minimum X value.                                    C
  182. C    MinY - The minimum Y value.                                    C
  183. C    dsep - User input - the line data seperator value.             C
  184. C    X - User input - the X coordinate data.                        C
  185. C    Y - User input - the Y coordinate data.                        C
  186. C    values - The values of the tick marks.                         C
  187. C    SF - Scale factor - not used in this revision.                 C
  188. C    user_max - User input - A refinement value for the distance    C
  189. C        between the top of the maximum point and the top of    C
  190. C        the plot.                                              C
  191. C    user_min - User input - A refinement value for the distance    C
  192. C        between the bottom of the minimum point and the bottom C
  193. C        of the plot.                                           C
  194. C                                                                      C
  195. C Real*4                                                               C
  196. C    Rerr - The real error return value - see Errval                C
  197. C                                                                      C
  198. C Character                                                            C
  199. C    s_tit - The screen title - hardcoded                           C
  200. C    w_tit - User input - the window title.                         C
  201. C    x_lab - User input - the X axis label.                         C
  202. C    y_lab - User input - the Y axis label.                         C
  203. C    filename - User input - the file name of the user input file   C
  204. C                                                                      C
  205. C Parameters (Integer)                                                 C
  206. C    YES - value = 1                                                C
  207. C    NO - value = 0                                                 C
  208. C    LINEAR - value = 0                                             C
  209. C    LOG - value = 1                                                C
  210. C    SEMILOG - value = 2                                            C
  211. C    XAXIS - value = 0                                              C
  212. C    YAXIS - value = 1                                              C
  213. C    SEXP - The smallest exponent looked at in the log axis         C
  214. C        expansion.                                             C
  215. C    LEXP - The largest exponent looked at in the log axis          C
  216. C        expansion.                                             C
  217. C    MAXVAL - The maximum number of tick marks allowed.             C
  218. C    MAXPAIRS - The maximum number of data pairs allowed.           C
  219. C    TKMK - The pixel length of a tick mark.                        C
  220. C    SYMSIZE - The pixel length of a symbol.                        C
  221. C                                                                      C
  222. C Commons                                                              C
  223. C    ScrnData ->                                                    C
  224. C    s_h, s_w, s_d, w_h, w_w, lefoff, rigoff, topoff, botoff, grid, C
  225. C    xtype, ytype, dsep, MaxX, MaxY, MinX, MinY, symdraw, linedraw, C
  226. C    p_loff, p_roff, p_toff, p_boff, user_max, user_min, gridline,  C
  227. C    RP, lefpt, rigpt, toppt, botpt, s_tit, w_tit, x_lab, y_lab     C
  228. C                                                                      C
  229. C    Plotdata ->                                                    C
  230. C    X, Y, line, pts                                                C
  231. C                                                                      C
  232. C    MarkData ->                                                    C
  233. C    SF, values, pixels                                             C
  234. C                                                                      C
  235. C======================================================================C
  236. C                                                                      C
  237. C Amiga Subprograms:                                                   C
  238. C                                                                      C
  239. C    IntuitionBase - Determines the base address of the Intuition   C
  240. C        library.                                               C
  241. C    GfxBase - Determines the base address of the graphics library. C
  242. C    Wait - Exec routine that is used in this program to wait       C
  243. C        until the closewindow gadget is activated.             C
  244. C    CloseWindow - This closes the open window.                     C
  245. C    CloseScreen - This closes the open screen.                     C
  246. C    ShowTitle - This is used to put the screen title behind the    C
  247. C        window title on the backdrop screen.                   C
  248. C    SetRGB4 - This places a (red,green,blue) data triplet into     C
  249. C        the current color table of the new screen              C
  250. C    SetAPen - This set the A pen color to the color indicated in   C
  251. C        the color table.                                       C
  252. C    SetBPen - This sets the B pen color to the color indicated in  C
  253. C        the color table.                                       C
  254. C    SetDrMd - This sets the drawing mode.                          C
  255. C    Move - This moves the graphics cursor to the specified         C
  256. C        coordinates.                                           C
  257. C    Draw - This draws from the current graphics cursor position    C
  258. C        to the indicated coordinates.                          C
  259. C    Text - This places text in the window at the indicated cursor  C
  260. C        position.                                              C
  261. C                                                                      C
  262. C Internal Subprograms:                                                C
  263. C                                                                      C
  264. C    DataRead - This reads and slightly processes the data in the   C
  265. C        disk file name.                                        C
  266. C    ScrnDepth - The determines the screen depth needed to support  C
  267. C        the number of lines read in.                           C
  268. C    DataGen - The generates any data needed.                       C
  269. C    NewScreen - This creates the custom screen.                    C
  270. C    NewWindow - This creates the backdrop window where the plot    C
  271. C        will appear.                                           C
  272. C    MaxMin - This finds the maximum and minimum data values read   C
  273. C        in from the data file.                                 C
  274. C    InitPlot - This initialize the plot surface - Axis, Grid       C
  275. C        lines, Tick marks, Value labels, Titles, etc....       C
  276. C    Plot - This plots one lines worth of data.                     C
  277. C    LinTickMark - This determines the tick marks for the           C
  278. C        expanded plot axis for linear data.                    C
  279. C    LogTickMark - This determines the tick marks for the           C
  280. C        expanded plot axis for log data.                       C
  281. C    DrawLabels - This draws the axis data vlaue labels.            C
  282. C    DrawGrid - This draws the grid lines.                          C
  283. C    SymbolDraw - This draws the symbols at each point.             C
  284. C    DrawTicks - This draws the tick marks onto the plot.           C
  285. C                                                                      C
  286. C External Subprograms:                                                C
  287. C                                                                      C
  288. C    ARGS - An AC/FORTRAN subprogram that reads the command line    C
  289. C        and stores it in a character string.                   C
  290. C    amiga - An AC/FORTRAN subprogram that allows AMIGA function    C
  291. C        calls from FORTRAN.                                    C
  292. C    loc - An AC/FORTRAN subprogram that assigns the ADDRESS of     C
  293. C        the argument to the variable.                          C
  294. C    f77.rl - The AC/FORTRAN runtime library.                       C
  295. C                                                                      C
  296. C======================================================================C
  297. C                                                                      C
  298. C Error detection and recovery:                                        C
  299. C                                                                      C
  300. C    An Error flag is set if an error occured and the program task  C
  301. C    is immediately exited.  Upon returning to the main program,    C
  302. C    the corresponding error message is written and what ever is    C
  303. C    opened is closed.  Then the program exits.  A real or          C
  304. C    integer error value is passed back to the main program to      C
  305. C    allow some diagnostic data in the error message.               C
  306. C                                                                      C
  307. C======================================================================C
  308. C                                                                      C
  309. C Revision History:                                                    C
  310. C                                                                      C
  311. C    Original Release: 11/01/89 - Revision 1.0                      C
  312. C                                                                      C
  313. C    UPDATES ->                                                     C
  314. C    Date:    Initials:    Remark or Task:                        C
  315. C                                                                      C
  316. C======================================================================C
  317. C                                                                      C
  318. C Known Bugs:                                                          C
  319. C                                                                      C
  320. C    Revision 1.0 - none                                            C
  321. C                                                                      C
  322. C======================================================================C
  323. C                                                                      C
  324. C Upcomming Updates (Wish List) not in any order:                      C
  325. C                                                                      C
  326. C    - Axis labels self truncating.  Make axis value labels only    C
  327. C        show as many digitis as needed and still center on     C
  328. C        tick mark                                              C
  329. C                                                                      C
  330. C    - Ability to update colors, screen depth, and symbols used     C
  331. C        from user input                                        C
  332. C                                                                      C
  333. C    - Ability to mix data plot types, e.g., scatter and lines on   C
  334. C        one plot                                               C
  335. C                                                                      C
  336. C    - Addition of numerical analysis techniques to smooth the      C
  337. C        plotted lines                                          C
  338. C                                                                      C
  339. C    - Addition of regression (etc...) techniques to plot the best  C
  340. C        curve through the given points                         C
  341. C                                                                      C
  342. C    - Addition of error bars on the data points used in the        C
  343. C        regression techniques mentioned above                  C
  344. C                                                                      C
  345. C    - Addition of a legend to identify the lines drawn             C
  346. C                                                                      C
  347. C    - Make all data items available to the menu for user           C
  348. C        adjustment while the program is executing              C
  349. C                                                                      C
  350. C    - Make data acquision of data pairs dynamic                    C
  351. C                                                                      C
  352. C    - Create a menu driven program to generate input files         C
  353. C                                                                      C
  354. C    - Major revision to allow this package to render 3D surfaces   C
  355. C        and volumes.  Change name to PlotData3D                C
  356. C                                                                      C
  357. C======================================================================C
  358. C
  359.     Implicit None
  360. C
  361. C======================================================================C
  362. C Include files                                                        C
  363. C    exec.inc - include file for exec kernal library functions      C
  364. C    graph.inc - include file for graphics library functions        C
  365. C    intuit.inc - include file for intuition library functions      C
  366. C    plotdata.inc - include file for plotdata common data           C
  367. C======================================================================C
  368. C
  369.     Include include:exec.inc
  370.     Include include:intuit.inc
  371.     Include include:graph.inc
  372.     Include include:plotdata.inc
  373. C
  374. C======================================================================C
  375. C Integer variables                                                    C
  376. C======================================================================C
  377. C
  378.     Integer
  379.      1    Window, Screen, i, j
  380. C
  381. C======================================================================C
  382. C Character variables                                                  C
  383. C======================================================================C
  384. C
  385.     Character
  386.      1    filename*255
  387. C
  388. C======================================================================C
  389. C Error handling variables                                             C
  390. C======================================================================C
  391. C
  392.     Integer Error
  393.     Integer*4 Ierr
  394.     Real*4 Rerr
  395.     Integer*1 Errval(4)
  396.     Equivalence
  397.      1    ( Errval(1), Ierr ),
  398.      2    ( Errval(1), Rerr )
  399. C
  400. C======================================================================C
  401. C Data statements                                                      C
  402. C======================================================================C
  403. C
  404.     Data
  405.      1    Error / 0 /,
  406.      2    Errval / 4*0 /
  407. C
  408. C**********************************************************************C
  409. C Start of program                                                     C
  410. C**********************************************************************C
  411. C
  412. C======================================================================C
  413. C Get the filename from the command line                               C
  414. C======================================================================C
  415. C
  416.     Call ARGS ( filename )
  417. C
  418. C======================================================================C
  419. C Check for help symbol                                                C
  420. C======================================================================C
  421. C
  422.     If ( filename(1:1) .eq. 'h'  .or.  filename(1:1) .eq. 'H' ) Then
  423.         Write ( *, 2000 )
  424.         Go To 9990
  425.     End If
  426. C
  427. C======================================================================C
  428. C Set up the screen title                                              C
  429. C======================================================================C
  430. C
  431.     s_tit = 'PlotData2D: General Plotting Package 1.0 by Robert ' //
  432.      1        'Singleterry - 11/01/89' // char(0)
  433. C
  434. C======================================================================C
  435. C Read the specific data for the plot - Labels, title, data, etc....   C
  436. C======================================================================C
  437. C
  438.     Call DataRead ( filename, Error, Errval )
  439.     If ( Error .eq. 0 ) Then
  440.         Continue
  441.     Else If ( Error .eq. 1 ) Then
  442.         Write ( *, 9160 ) Ierr
  443.         Go To 9990
  444.     Else If ( Error .eq. 2 ) Then
  445.         Write ( *, 9240 ) Ierr
  446.         Go To 9990
  447.     Else If ( Error .eq. 3 ) Then
  448.         Write ( *, 9000 ) Ierr
  449.         Go To 9990
  450.     Else If ( Error .eq. 4 ) Then
  451.         Write ( *, 9260 ) Ierr
  452.         Go To 9990
  453.     Else If ( Error .eq. 5 ) Then
  454.         Write ( *, 9040 ) Ierr
  455.         Go To 9990
  456.     Else
  457.         Write ( *, 9020 ) Error, 'DataRead'
  458.         Go To 9990
  459.     End If
  460. C
  461. C======================================================================C
  462. C Find the depth of the screen to hold all of the lines being plotted  C
  463. C======================================================================C
  464. C
  465.     Call ScrnDepth ( Error, Errval )
  466.     If ( Error .eq. 0 ) Then
  467.         Continue
  468.     Else
  469.         Write ( *, 9020 ) Error, 'ScrnDepth'
  470.         Go To 9997
  471.     End If
  472. C
  473. C======================================================================C
  474. C Perform any data adjustment that is necessary                        C
  475. C    Find the size of the plot area                                 C
  476. C    If a regression is needed, find the lines to plot              C
  477. C======================================================================C
  478. C
  479.     Call DataGen ( Error, Errval )
  480.     If ( Error .eq. 0 ) Then
  481.         Continue
  482.     Else
  483.         Write ( *, 9020 ) Error, 'DataGen'
  484.         Go To 9997
  485.     End If
  486. C
  487. C======================================================================C
  488. C Initial set up of displays:                                          C
  489. C    Find IntuitionBase                                                C
  490. C    Find GfxBase                                                      C
  491. C======================================================================C
  492. C
  493.     Call amiga ( IntuitionBase )
  494.     If ( IntuitionBase .eq. 0 ) Then
  495.         Write ( *, 9060 )
  496.         Go To 9990
  497.     End If
  498. C
  499.     Call amiga ( GfxBase )
  500.     If ( GfxBase .eq. 0 ) Then
  501.         Write ( *, 9080 )
  502.         Go To 9990
  503.     End If
  504. C
  505. C======================================================================C
  506. C Open new screen                                                      C
  507. C======================================================================C
  508. C
  509.     Call NewScreen ( Screen, Error, Errval )
  510.     If ( Error .eq. 0 ) Then
  511.         Continue
  512.     Else If ( Error .eq. 1 ) Then
  513.         Write ( *, 9100 ) Ierr
  514.         Go To 9990
  515.     Else If ( Error .eq. 2 ) Then
  516.         Write ( *, 9200 ) Ierr
  517.         Go To 9990
  518.     Else If ( Error .eq. 3 ) Then
  519.         Write ( *, 9220 ) Ierr
  520.         Go To 9990
  521.     Else
  522.         Write ( *, 9020 ) Error, 'NewScreen'
  523.         Go To 9990
  524.     End If
  525. C
  526. C======================================================================C
  527. C Open new window                                                      C
  528. C======================================================================C
  529. C
  530.     Call NewWindow ( Screen, Window, Error, Errval )
  531.     If ( Error .eq. 0 ) Then
  532.         Continue
  533.     Else If ( Error .eq. 1 ) Then
  534.         Write ( *, 9120 ) Ierr
  535.         Go To 9995
  536.     Else
  537.         Write ( *, 9020 ) Error, 'NewWindow'
  538.         Go To 9995
  539.     End If
  540. C
  541. C======================================================================C
  542. C Find the maximum and minimum x and y values                          C
  543. C======================================================================C
  544. C
  545.     Call MaxMin ( Error, Errval )
  546.     If ( Error .eq. 0 ) Then
  547.         Continue
  548.     Else
  549.         Write ( *, 9020 ) Error, 'MaxMin'
  550.         Go To 9997
  551.     End If
  552. C
  553. C======================================================================C
  554. C Draw X and Y axis, axis labels, tick marks, data labels, grids, etc  C
  555. C======================================================================C
  556. C
  557.     Call InitPlot ( Error, Errval )
  558.     If ( Error .eq. 0 ) Then
  559.         Continue
  560.     Else If ( Error .eq. 1 ) Then
  561.         Write ( *, 9140 ) Rerr
  562.         Go To 9997
  563.     Else If ( Error .eq. 2 ) Then
  564.         Write ( *, 9280 ) Rerr
  565.         Go To 9997
  566.     Else If ( Error .eq. 3 ) Then
  567.         Write ( *, 9300 ) Ierr
  568.         Go To 9997
  569.     Else If ( Error .eq. 4 ) Then
  570.         Write ( *, 9320 )
  571.         Go To 9997
  572.     Else If ( Error .eq. 5 ) Then
  573.         Write ( *, 9340 ) Ierr
  574.         Go To 9997
  575.     Else If ( Error .eq. 6 ) Then
  576.         Write ( *, 9180 ) Ierr
  577.         Go To 9997
  578.     Else If ( Error .eq. 7 ) Then
  579.         Write ( *, 9380 ) Ierr
  580.         Go To 9997
  581.     Else If ( Error .eq. 8 ) Then
  582.         Write ( *, 9400 ) Ierr
  583.         Go To 9997
  584.     Else
  585.         Write ( *, 9200 ) Error, 'InitPLot'
  586.         Go To 9997
  587.     End If
  588. C
  589. C======================================================================C
  590. C Plot all lines                                                       C
  591. C======================================================================C
  592. C
  593.     Do ( i = 1, line )
  594.         Call Plot ( i, Error, Errval )
  595.         If ( Error .eq. 0 ) Then
  596.             Continue
  597.         Else If ( Error .eq. 1 ) Then
  598.             Write ( *, 9360 ) Ierr
  599.             Go To 9997
  600.         Else
  601.             Write ( *, 9020 ) Error, 'Plot'
  602.             Go To 9997
  603.         End If
  604.     End Do
  605. C
  606. C======================================================================C
  607. C Wait until the user closes the window                                C
  608. C======================================================================C
  609. C
  610.     Call amiga ( Wait,
  611.      1     shift ( 1, byte ( long(Window+wd_UserPort) + MP_SIGBIT ) ) )
  612. C
  613. C======================================================================C
  614. C Execute all exit routines                                            C
  615. C======================================================================C
  616. C
  617. 9999    Continue
  618. C
  619. C======================================================================C
  620. C Close the window                                                     C
  621. C======================================================================C
  622. C
  623. 9997    Continue
  624.     Call amiga ( CloseWindow, Window )
  625. C
  626. C======================================================================C
  627. C Close the screen - Open new window failure                           C
  628. C======================================================================C
  629. C
  630. 9995    Continue
  631.     Call amiga ( CloseScreen, Screen )
  632. C
  633. C======================================================================C
  634. C Execute proper stop message                                          C
  635. C======================================================================C
  636. C
  637. 9990    Continue
  638.     If ( Error .eq. 0 ) Then
  639.         Stop 'FORTRAN STOP'
  640.     Else
  641.         Stop 'FORTRAN ABORT'
  642.     End If
  643. C
  644. C======================================================================C
  645. C Format statements                                                    C
  646. C======================================================================C
  647. C
  648. 2000    Format ( 'PlotData2D Package help output:', /,
  649.      2    'Input file specification', /, '  1 - Screen height', /,
  650.      3    '  2 - Screen width', /, '  3 - Window height', /,
  651.      4    '  4 - Window width', /, '  5 - Window title (80 characters)',/,
  652.      5    '  6 - X axis label (60 characters)', /,
  653.      6    '  7 - Y axis label (60 characters)', /,
  654.      7    '  8 - Left, Right, Top, Bottom axis offset from edge of ',
  655.      8    'window', /,
  656.      9    '  9 - Left, Right, Top, Bottom plot offset from item 8', /,
  657.      1    ' 10 - User inputed maximum refinement value', /,
  658.      1    ' 11 - User inputed minimum refinement value', /,
  659.      2    ' 12 - Grid flag -> 0: No grid lines, 1: Grid lines', /,
  660.      3    ' 13 - Plot type -> 0: Linear, 1: Log, 2: Semilog', /,
  661.      4    ' 14 - Symbol flag -> 0: No symbols, 1: Symbols', /,
  662.      5    ' 15 - Line flag -> 0: No lines, 1: Draw lines', /,
  663.      6    ' 16 - Data Seperator -> A number to seperate the lines', /,
  664.      7    ' 17 - Data in X Y pairs with the lines seperated by data ',
  665.      8    'item 15', //,
  666.      9    'alias pd <vol:dir>PlotData2D []', /, 'pd <filename>', /,
  667.      2    'pd h - for this help file' )
  668. C
  669. 9000    Format ( '***** Error: One point found to plot for line ', i3 )
  670. 9020    Format ( '***** Error: Undefined Error = ', i3.3, 
  671.      1         ' for routine ', a )
  672. 9040    Format ( '***** Error: The plot type read is invalid: ', i2 )
  673. 9060    Format ( '***** Error: IntuitionBase failure' )
  674. 9080    Format ( '***** Error: GfxBase failure' )
  675. 9100    Format ( '***** Error: Could not create new screen = ', i10 )
  676. 9120    Format ( '***** Error: Could not create new window = ', i10 )
  677. 9140    Format ( '***** Error: Minimum value of ', e15.5, ' is below ',
  678.      1         'the default value used to search for bottom of scale')
  679. 9160    Format ( '***** Error: Could not open data file, iostat = ',
  680.      1         i10 )
  681. 9180    Format ( '***** Error: Invalid y-axis plot type used: ', i4 )
  682. 9200    Format ( '***** Error: Invalid screen width: ', i5 )
  683. 9220    Format ( '***** Error: Invalid screen height: ', i5 )
  684. 9240    Format ( '***** Error: Exceeded maximum number of ',
  685.      1        'point pairs allowed: ', i6 )
  686. 9260    Format ( '***** Error: Exceeded the number of lines allowed: ',
  687.      1         i5 )
  688. 9280    Format ( '***** Error: Maximum value of ', e15.5, ' is above ',
  689.      1         'the default values used to search for top of scale' )
  690. 9300    Format ( '***** Error: Invalid x-axis plot type used: ', i4 )
  691. 9320    Format ( '***** Error: Number of tick mark algorithm failed ',
  692.      1         'in LinTickMark rotuine')
  693. 9340    Format ( '***** Error: Invalid Axis used: ', i4 )
  694. 9360    Format ( '***** Error: Invalid symbol value: ', i4 )
  695. 9380    Format ( '***** Error: Number of tick marks too large:', i6 )
  696. 9400    Format ( '***** Error: Invalid axis type passed to DrawLabels: '
  697.      1         i4 )
  698. C
  699. C======================================================================C
  700. C End of program                                                       C
  701. C======================================================================C
  702. C
  703.       End
  704. C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  705.     Subroutine NewScreen ( Screen, Error, Ierr )
  706. C
  707. C======================================================================C
  708. C                                                                      C
  709. C Purpose:                                                             C
  710. C                                                                      C
  711. C    This subprogram creates a new screen to the user's             C
  712. C    specifications.  It should support all sizes inputted into     C
  713. C    it, including PAL sizes, but with out a PAL machine, I have    C
  714. C    not tested it.                                                 C
  715. C                                                                      C
  716. C======================================================================C
  717. C                                                                      C
  718. C Variables Definitions:                                               C
  719. C                                                                      C
  720. C Integer                                                              C
  721. C    Screen - The address of the screen structure.                  C
  722. C    vm - The view mode flag.  This is defined at runtime from user C
  723. C        input.                                                 C
  724. C    Error - The error flag set by different errors.                C
  725. C    Ierr - An integer value returned when an error occurs.         C
  726. C    amiga - An AC/FORTRAN subprogram to allow access to the AMIGA  C
  727. C        kernal functions.                                      C
  728. C    loc - The stores the address of the argument, not the value.   C
  729. C                                                                      C
  730. C Character                                                            C
  731. C    Font - The name of the font used.                              C
  732. C                                                                      C
  733. C======================================================================C
  734. C                                                                      C
  735. C Error Recovery:                                                      C
  736. C                                                                      C
  737. C    Error = 1 => OpenScreen failure.                               C
  738. C    Error = 2 => The screen width is less than 320 pixels.         C
  739. C    Error = 3 => The screen height is less than 200 pixels.        C
  740. C                                                                      C
  741. C======================================================================C
  742. C
  743.     Implicit None
  744. C
  745. C======================================================================C
  746. C Include files                                                        C
  747. C======================================================================C
  748. C
  749.     Include include:graph.inc
  750.     Include include:intuit.inc
  751.     Include include:plotdata.inc
  752. C
  753. C======================================================================C
  754. C Integer variables                                                    C
  755. C======================================================================C
  756. C
  757.     Integer
  758.      1    Screen, amiga, loc, vm
  759. C
  760. C======================================================================C
  761. C Character variables                                                  C
  762. C======================================================================C
  763. C
  764.     Character
  765.      1    Font*11
  766. C
  767. C======================================================================C
  768. C Error handling variables                                             C
  769. C======================================================================C
  770. C
  771.     Integer Error
  772.     Integer*4 Ierr
  773. C
  774. C======================================================================C
  775. C Saved variables                                                      C
  776. C======================================================================C
  777. C
  778.     Save NewScreen
  779. C
  780. C**********************************************************************C
  781. C Start of program                                                     C
  782. C**********************************************************************C
  783. C
  784. C======================================================================C
  785. C Define text attribute structure                                      C
  786. C======================================================================C
  787. C
  788.     Font = 'topaz.font' // char(0)
  789.     ta_Name  = loc ( Font )
  790.     ta_YSize = 8
  791.     ta_Style = FS_NORMAL
  792.     ta_Flags = FP_ROMFONT
  793. C
  794. C======================================================================C
  795. C Define the view modes attributes                                     C
  796. C======================================================================C
  797. C
  798.     vm = 0
  799. C
  800.     If ( s_w .ge. 640 ) Then
  801.         vm = vm .or. HIRES
  802.     Else If ( s_w .lt. 320 ) Then
  803.         Error = 2
  804.         Ierr = s_w
  805.         Go To 9999
  806.     End If
  807. C
  808.     If ( s_h .ge. 400 ) Then
  809.         vm = vm .or. LACE
  810.     Else If ( s_h .lt. 200 ) Then
  811.         Error = 3
  812.         Ierr = s_h
  813.         Go To 9999
  814.     End If
  815. C
  816. C======================================================================C
  817. C Define the new screen structure                                      C
  818. C======================================================================C
  819. C
  820.     ns_LeftEdge   = 0
  821.     ns_TopEdge    = 0
  822.     ns_Width      = s_w
  823.     ns_Height     = s_h
  824.     ns_Depth      = s_d
  825.     ns_DetailPen  = 1
  826.     ns_BlockPen   = 0
  827.     ns_ViewModes  = vm
  828.     ns_Type       = CUSTOMSCREEN
  829.     ns_Font       = loc ( TextAttr )
  830.     ns_DefTitle   = loc ( s_tit )
  831.     ns_Gadgets    = 0
  832.     ns_CustBitMap = 0
  833. C
  834. C======================================================================C
  835. C Open the new screen                                                  C
  836. C======================================================================C
  837. C
  838.     Screen = amiga ( OpenScreen, NewScreen )
  839.     If ( Screen .eq. 0 ) Then
  840.         Error = 1
  841.         Ierr = Screen
  842.         Go To 9999
  843.     End If
  844. C
  845. C======================================================================C
  846. C Return to calling program                                            C
  847. C======================================================================C
  848. C
  849. 9999    Continue
  850.     Return
  851.     End
  852. C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  853.     Subroutine NewWindow ( Screen, Window, Error, Ierr )
  854. C
  855. C======================================================================C
  856. C                                                                      C
  857. C Purpose:                                                             C
  858. C                                                                      C
  859. C    This subprogram creates a new backdrop active window to plot   C
  860. C    on.  This window is on the screen pointed to by the Screen     C
  861. C    argument.  This subprogram then defines the color table used   C
  862. C    by the plotting package.  The window is created at a fixed     C
  863. C    poistion (0,1) to allow access to the screen's depth gadget.   C
  864. C                                                                      C
  865. C======================================================================C
  866. C                                                                      C
  867. C Variables Definitions:                                               C
  868. C                                                                      C
  869. C Integer                                                              C
  870. C    Window - The address of the window structure.                  C
  871. C    Screen - The address of the screen structure from the          C
  872. C        NewScreen subprogram.                                  C
  873. C    vp - Address of the veiwport data structure for use by         C
  874. C        SetRGB4.                                               C
  875. C    Error - The error flag used to signal errors.                  C
  876. C    Ierr - An integer error return value.                          C
  877. C    amiga - An AC/FORTRAN subprogram that allows use of the AMIGA  C
  878. C        kernal functions.                                      C
  879. C    loc - This stores the address of the argument rather than      C
  880. C        the value.                                             C
  881. C                                                                      C
  882. C======================================================================C
  883. C                                                                      C
  884. C Error Recovery:                                                      C
  885. C                                                                      C
  886. C    Error = 1 => An OpenWindow function failure.                   C
  887. C                                                                      C
  888. C======================================================================C
  889. C
  890.     Implicit None
  891. C
  892. C======================================================================C
  893. C Include files                                                        C
  894. C======================================================================C
  895. C
  896.     Include include:intuit.inc
  897.     Include include:graph.inc
  898.     Include include:plotdata.inc
  899. C
  900. C======================================================================C
  901. C Integer variables                                                    C
  902. C======================================================================C
  903. C
  904.     Integer
  905.      1    amiga, loc, Window, Screen, vp
  906. C
  907. C======================================================================C
  908. C Saved variables                                                      C
  909. C======================================================================C
  910. C
  911.     Save NewWindow
  912. C
  913. C======================================================================C
  914. C Error handling variables                                             C
  915. C======================================================================C
  916. C
  917.     Integer Error
  918.     Integer*4 Ierr
  919. C
  920. C**********************************************************************C
  921. C Start of program                                                     C
  922. C**********************************************************************C
  923. C
  924. C======================================================================C
  925. C Defining the new window structure                                    C
  926. C======================================================================C
  927. C
  928.     nw_LeftEdge   = 0
  929.     nw_TopEdge    = 1
  930.     nw_Width      = w_w
  931.     nw_Height     = w_h - 1
  932.     nw_DetailPen  = 1
  933.     nw_BlockPen   = 0
  934.     nw_Title      = loc ( w_tit )
  935.     nw_Flags      = WINDOWCLOSE .or. BORDERLESS .or. ACTIVATE
  936.      1            .or. BACKDROP
  937.     nw_IDCMPFlags = CLOSEWINDOW
  938.     nw_Type       = CUSTOMSCREEN
  939.     nw_FirstGdgt  = 0
  940.     nw_CheckMark  = 0
  941.     nw_Screen     = Screen
  942.     nw_BitMap     = 0
  943.     nw_MinWidth   = -1
  944.     nw_MinHeight  = -1
  945.     nw_MaxWidth   = -1
  946.     nw_MaxHeight  = -1
  947. C
  948. C======================================================================C
  949. C Open the new window                                                  C
  950. C======================================================================C
  951. C
  952.     Window = amiga ( OpenWindow, NewWindow )
  953.     If ( Window .eq. 0 ) Then
  954.         Error = 1
  955.         Ierr = Window
  956.         Go To 9999
  957.     End If
  958. C
  959. C======================================================================C
  960. C Place the screen title behind the backdrop window title              C
  961. C======================================================================C
  962. C
  963.     Call amiga ( ShowTitle, Screen, 0 )
  964. C
  965. C======================================================================C
  966. C Define the raster port pointer                                       C
  967. C======================================================================C
  968. C
  969.     RP = long ( Window + wd_RPort )
  970. C
  971. C======================================================================C
  972. C Define the view port pointer                                         C
  973. C======================================================================C
  974. C
  975.     vp = amiga ( ViewPortAddress, Window )
  976. C
  977. C======================================================================C
  978. C Set up the color table                                               C
  979. C       Color Table Number     Red    Green    Blue     Color          C
  980. C        00        0    0    0    black          C
  981. C        01        F    F    F    white          C
  982. C        02        F    0    0    red            C
  983. C        03        0    F    0    green          C
  984. C        04        0    0    F    blue           C
  985. C        05        F    F    0    lemmon yellow  C
  986. C        06        6    C    E    lt blue        C
  987. C        07        F    A    C    pink           C
  988. C        08        B    F    0    lime green     C
  989. C        09        A    8    7    brown          C
  990. C        10        9    1    F    purple         C
  991. C        11        F    9    0    orange         C
  992. C        12        2    C    0    dark green     C
  993. C        13        F    D    0    cadmium yellow C
  994. C        14        D    0    0    brick red      C
  995. C        15        C    1    F    violet         C
  996. C        16        F    D    7                   C
  997. C        17        F    F    F    white          C
  998. C        18        F    0    0    red            C
  999. C        19        0    F    0    green          C
  1000. C        20        0    0    F    blue           C
  1001. C        21        F    F    0    lemmon yellow  C
  1002. C        22        6    C    E    lt blue        C
  1003. C        23        F    A    C    pink           C
  1004. C        24        B    F    0    lime green     C
  1005. C        25        A    8    7    brown          C
  1006. C        26        9    1    F    purple         C
  1007. C        27        F    9    0    orange         C
  1008. C        28        2    C    0    dark green     C
  1009. C        29        F    D    0    cadmium yellow C
  1010. C        30        D    0    0    brick red      C
  1011. C        31        C    1    F    violet         C
  1012. C======================================================================C
  1013. C
  1014.     Call amiga ( SetRGB4, vp, 00, 00, 00, 00 )
  1015.     Call amiga ( SetRGB4, vp, 01, 15, 15, 15 )
  1016.     Call amiga ( SetRGB4, vp, 02, 15, 00, 00 )
  1017.     Call amiga ( SetRGB4, vp, 03, 00, 15, 00 )
  1018.     Call amiga ( SetRGB4, vp, 04, 00, 00, 15 )
  1019.     Call amiga ( SetRGB4, vp, 05, 15, 15, 00 )
  1020.     Call amiga ( SetRGB4, vp, 06, 06, 12, 14 )
  1021.     Call amiga ( SetRGB4, vp, 07, 15, 10, 12 )
  1022.     Call amiga ( SetRGB4, vp, 08, 11, 15, 00 )
  1023.     Call amiga ( SetRGB4, vp, 09, 10, 08, 07 )
  1024.     Call amiga ( SetRGB4, vp, 10, 09, 01, 15 )
  1025.     Call amiga ( SetRGB4, vp, 11, 15, 09, 00 )
  1026.     Call amiga ( SetRGB4, vp, 12, 02, 12, 00 )
  1027.     Call amiga ( SetRGB4, vp, 13, 15, 13, 00 )
  1028.     Call amiga ( SetRGB4, vp, 14, 13, 00, 00 )
  1029.     Call amiga ( SetRGB4, vp, 15, 12, 01, 15 )
  1030.     Call amiga ( SetRGB4, vp, 16, 15, 13, 07 )
  1031.     Call amiga ( SetRGB4, vp, 17, 15, 15, 15 )
  1032.     Call amiga ( SetRGB4, vp, 18, 15, 00, 00 )
  1033.     Call amiga ( SetRGB4, vp, 19, 00, 15, 00 )
  1034.     Call amiga ( SetRGB4, vp, 20, 00, 00, 15 )
  1035.     Call amiga ( SetRGB4, vp, 21, 15, 15, 00 )
  1036.     Call amiga ( SetRGB4, vp, 22, 06, 12, 14 )
  1037.     Call amiga ( SetRGB4, vp, 23, 15, 10, 12 )
  1038.     Call amiga ( SetRGB4, vp, 24, 11, 15, 00 )
  1039.     Call amiga ( SetRGB4, vp, 25, 10, 08, 07 )
  1040.     Call amiga ( SetRGB4, vp, 26, 09, 01, 15 )
  1041.     Call amiga ( SetRGB4, vp, 27, 15, 09, 00 )
  1042.     Call amiga ( SetRGB4, vp, 28, 02, 12, 00 )
  1043.     Call amiga ( SetRGB4, vp, 29, 15, 13, 00 )
  1044.     Call amiga ( SetRGB4, vp, 30, 13, 00, 00 )
  1045.     Call amiga ( SetRGB4, vp, 31, 12, 01, 15 )
  1046. C
  1047. C======================================================================C
  1048. C Set the grid line color and place it into the color table            C
  1049. C======================================================================C
  1050. C
  1051.     gridline = int ( 2.0 ** float(s_d) ) - 1
  1052.     If ( gridline .lt. 3 ) Then
  1053.         gridline = 3
  1054.     End If
  1055.     Call amiga ( SetRGB4, vp, gridline, 5, 4, 5 )
  1056. C
  1057. C======================================================================C
  1058. C Return to calling program                                            C
  1059. C======================================================================C
  1060. C
  1061. 9999    Continue
  1062.     Return
  1063.     End
  1064. C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1065.     Subroutine InitPlot ( Error, Ierr )
  1066. C
  1067. C======================================================================C
  1068. C                                                                      C
  1069. C Purpose:                                                             C
  1070. C                                                                      C
  1071. C    This subprogram initalizes the plotting screen.  It sets up    C
  1072. C    pen colors and the drawing mode, draws the plot borders, puts  C
  1073. C    the axis labels on the plot, draws the tick marks, the axis    C
  1074. C    data labels, and the grid marks.                               C
  1075. C                                                                      C
  1076. C======================================================================C
  1077. C                                                                      C
  1078. C Variables Definitions:                                               C
  1079. C                                                                      C
  1080. C Integer*2                                                            C
  1081. C    wline - The line pattern to draw the coordinate axis with      C
  1082. C                                                                      C
  1083. C Integer                                                              C
  1084. C    ticks - A parameter to pass to the subprograms that tells      C
  1085. C        how many tick marks (or grid marks) to draw            C
  1086. C    pstart - The starting pixel to draw the coordinate axis from   C
  1087. C    pend - The ending pixel to draw the coordinate axis to         C
  1088. C    pval - the value of zero to draw the axis at                   C
  1089. C    Error - The error flag                                         C
  1090. C    Ierr - The integer error value                                 C
  1091. C    Ierr1 - An integer error value that is indirectly passed to    C
  1092. C        the called subprograms                                 C
  1093. C    Errval1 - The storage area for the error values returned to    C
  1094. C        this subprogram                                        C
  1095. C                                                                      C
  1096. C Real                                                                 C
  1097. C    Rerr1 - A real error value that is indirectly passed to the    C
  1098. C        called subprograms                                     C
  1099. C                                                                      C
  1100. C======================================================================C
  1101. C                                                                      C
  1102. C Error Recovery:                                                      C
  1103. C                                                                      C
  1104. C    Error = 1 => The smallest data value is below the tick mark    C
  1105. C        check limit                                            C
  1106. C    Error = 2 => The largest data value is above the tick mark     C
  1107. C        check limit                                            C
  1108. C    Error = 3 => The X axis type flag is not LINEAR or LOG         C
  1109. C    Error = 4 => Linear tick mark algorithm failure                C
  1110. C    Error = 5 => The Axis argument is no the X or the Y axis       C
  1111. C    Error = 6 => The Y axis type flag is not LINEAR or LOG         C
  1112. C    Error = 7 => The number of tick marks found is too large       C
  1113. C    Error = 8 => The plot type value passed to drawLabels is not   C
  1114. C        LINEAR or LOG                                          C
  1115. C                                                                      C
  1116. C======================================================================C
  1117. C
  1118.     Implicit none
  1119. C
  1120. C======================================================================C
  1121. C Include files                                                        C
  1122. C======================================================================C
  1123. C
  1124.     Include include:graph.inc
  1125.     Include include:plotdata.inc
  1126. C
  1127. C======================================================================C
  1128. C Integer variables                                                    C
  1129. C======================================================================C
  1130. C
  1131.     Integer*2
  1132.      1    wline
  1133. C
  1134. C======================================================================C
  1135. C Integer variables                                                    C
  1136. C======================================================================C
  1137. C
  1138.     Integer
  1139.      1    ticks, pstart, pend, pval
  1140. C
  1141. C======================================================================C
  1142. C Error handling variables                                             C
  1143. C======================================================================C
  1144. C
  1145.     Integer Error
  1146.     Integer*4 Ierr, Ierr1
  1147.     Real*4 Rerr1
  1148.     Integer*1 Errval1(4)
  1149.     Equivalence ( Errval1(1), Ierr1 ), ( Errval1(1), Rerr1 )
  1150. C
  1151. C======================================================================C
  1152. C Data statements                                                      C
  1153. C======================================================================C
  1154. C
  1155.     Data
  1156.      1    wline / b'1111 1111 1111 1111' /
  1157. C
  1158. C**********************************************************************C
  1159. C Start of program                                                     C
  1160. C**********************************************************************C
  1161. C
  1162. C======================================================================C
  1163. C Setup the pen colors and drawing mode                                C
  1164. C======================================================================C
  1165. C
  1166.     Call amiga ( SetAPen, RP, 1 )
  1167.     Call amiga ( SetBPen, RP, 0 )
  1168.     Call amiga ( SetDrMd, RP, JAM2 )
  1169. C
  1170. C======================================================================C
  1171. C Draw plotting axis and borders                                       C
  1172. C======================================================================C
  1173. C
  1174.     Call amiga ( Move, RP,     lefoff-1,     topoff-1 )
  1175.     Call amiga ( Draw, RP, w_w-rigoff+1,     topoff-1 )
  1176.     Call amiga ( Draw, RP, w_w-rigoff+1, w_h-botoff   )
  1177.     Call amiga ( Draw, RP,     lefoff-1, w_h-botoff   )
  1178.     Call amiga ( Draw, RP,     lefoff-1,     topoff-1 )
  1179. C
  1180. C======================================================================C
  1181. C Label Y axis                                                         C
  1182. C======================================================================C
  1183. C
  1184.     Call amiga ( Move, RP, lefoff,   topoff-3 )
  1185.     Call amiga ( Text, RP,  y_lab, len(y_lab) )
  1186. C
  1187. C======================================================================C
  1188. C Label the X axis                                                     C
  1189. C======================================================================C
  1190. C
  1191.     Call amiga ( Move, RP, (w_w-len(x_lab))/2,      w_h-3 )
  1192.     Call amiga ( Text, RP,              x_lab, len(x_lab) )
  1193. C
  1194. C======================================================================C
  1195. C Determine if X axis linear tick marks are to be drawn                C
  1196. C======================================================================C
  1197. C
  1198.     If ( xtype .eq. LINEAR ) Then
  1199. C
  1200. C======================================================================C
  1201. C If linear, then find and draw the tick marks                         C
  1202. C======================================================================C
  1203. C
  1204.         Call LinTickMark ( XAXIS, MaxX, MinX, ticks,
  1205.      1                Error, Errval1 )
  1206.         If ( Error .ne. 0 ) Then
  1207.             Ierr = Ierr1
  1208.             Go To 9999
  1209.         End If
  1210. C
  1211. C======================================================================C
  1212. C Determine if X axis log tick marks are to be drawn                   C
  1213. C======================================================================C
  1214. C
  1215.     Else If ( xtype .eq. LOG ) Then
  1216. C
  1217. C======================================================================C
  1218. C If log, then find and draw the tick marks                            C
  1219. C======================================================================C
  1220. C
  1221.         Call LogTickMark ( XAXIS, MaxX, MinX, ticks,
  1222.      1                Error, Errval1 )
  1223.         If ( Error .ne. 0 ) Then
  1224.             Ierr = Ierr1
  1225.             Go To 9999
  1226.         End If
  1227. C
  1228. C======================================================================C
  1229. C If the type is not log or linear                                     C
  1230. C======================================================================C
  1231. C
  1232.     Else
  1233. C
  1234. C======================================================================C
  1235. C Signal an error and return                                           C
  1236. C======================================================================C
  1237. C
  1238.         Error = 3
  1239.         Ierr = xtype
  1240.         Go To 9999
  1241. C
  1242.     End If
  1243. C
  1244. C======================================================================C
  1245. C Draw X axis value labels                                             C
  1246. C======================================================================C
  1247. C
  1248.     Call DrawLabels ( XAXIS, ticks, xtype, Error, Ierr )
  1249.     If ( Error .ne. 0 ) Then
  1250.         Go To 9999
  1251.     End If
  1252. C
  1253. C======================================================================C
  1254. C Draw the grid marks if applicable                                    C
  1255. C======================================================================C
  1256. C
  1257.     If ( grid .eq. YES ) Then
  1258. C
  1259.         Call DrawGrid ( XAXIS, ticks, Error, Ierr )
  1260.         If ( Error .ne. 0 ) Then
  1261.             Go To 9999
  1262.         End If
  1263. C
  1264.     End If
  1265. C
  1266. C======================================================================C
  1267. C Determine if Y axis linear tick marks are to be drawn                C
  1268. C======================================================================C
  1269. C
  1270.     If ( ytype .eq. LINEAR ) Then
  1271. C
  1272. C======================================================================C
  1273. C If linear, then find and draw the tick marks                         C
  1274. C======================================================================C
  1275. C
  1276.         Call LinTickMark ( YAXIS, MaxY, MinY, ticks,
  1277.      1                Error, Errval1 )
  1278.         If ( Error .ne. 0 ) Then
  1279.             Ierr = Ierr1
  1280.             Go To 9999
  1281.         End If
  1282. C
  1283. C======================================================================C
  1284. C Determine if Y axis log tick marks are to be drawn                   C
  1285. C======================================================================C
  1286. C
  1287.     Else If ( ytype .eq. LOG ) Then
  1288. C
  1289. C======================================================================C
  1290. C If log, then find and draw the tick marks                            C
  1291. C======================================================================C
  1292. C
  1293.         Call LogTickMark ( YAXIS, MaxY, MinY, ticks,
  1294.      1                Error, Errval1 )
  1295.         If ( Error .ne. 0 ) Then
  1296.             Ierr = Ierr1
  1297.             Go To 9999
  1298.         End If
  1299. C
  1300. C======================================================================C
  1301. C If not linear or log                                                 C
  1302. C======================================================================C
  1303. C
  1304.     Else
  1305. C
  1306. C======================================================================C
  1307. C Signal an error and return                                           C
  1308. C======================================================================C
  1309. C
  1310.         Error = 6
  1311.         Ierr = ytype
  1312.         Go To 9999
  1313. C
  1314.     End If
  1315. C
  1316. C======================================================================C
  1317. C Draw Y axis value labels                                             C
  1318. C======================================================================C
  1319. C
  1320.     Call DrawLabels ( YAXIS, ticks, ytype, Error, Ierr )
  1321.     If ( Error .ne. 0 ) Then
  1322.         Go To 9999
  1323.     End If
  1324. C
  1325. C======================================================================C
  1326. C Draw the grid marks if applicable                                    C
  1327. C======================================================================C
  1328. C
  1329.     If ( grid .eq. YES ) Then
  1330. C
  1331.         Call DrawGrid ( YAXIS, ticks, Error, Ierr )
  1332.         If ( Error .ne. 0 ) Then
  1333.             Go To 9999
  1334.         End If
  1335. C
  1336.     End If
  1337. C
  1338. C======================================================================C
  1339. C Draw the Y coordinate axis if shown on graph                         C
  1340. C======================================================================C
  1341. C
  1342.     If ((xtype.ne.LOG).and.(MinX.le.0.0).and.(MaxX.ge.0.0)) Then
  1343.         pstart = w_h - botoff
  1344.         pend   = topoff
  1345.         pval   = int ( float(p_loff) +
  1346.      1          ( -MinX * float((w_w-p_roff)-p_loff) / (MaxX-MinX) ) )
  1347.         Call amiga ( SetAPen, RP, gridline )
  1348.         word ( RP + 34 ) = wline
  1349.         word ( RP + 32 ) = word ( RP + 32 ) .or. FRST_DOT
  1350.         Call amiga ( Move, RP, pval, pstart )
  1351.         Call amiga ( Draw, RP, pval, pend   )
  1352.     End If
  1353. C
  1354. C======================================================================C
  1355. C Draw the X coordinate axis if shown on graph                         C
  1356. C======================================================================C
  1357. C
  1358.     If ((ytype.ne.LOG).and.(MinY.le.0.0).and.(MaxY.ge.0.0) ) Then
  1359.         pstart = lefoff
  1360.         pend   = w_w - rigoff
  1361.         pval   = int ( float(w_h-p_boff) +
  1362.      1          ( -MinY * float(p_toff-(w_h-p_boff)) / (MaxY-MinY) ) )
  1363.         Call amiga ( SetAPen, RP, gridline )
  1364.         word ( RP + 34 ) = wline
  1365.         word ( RP + 32 ) = word ( RP + 32 ) .or. FRST_DOT
  1366.         Call amiga ( Move, RP, pstart, pval )
  1367.         Call amiga ( Draw, RP, pend,   pval )
  1368.     End If
  1369. C
  1370. C======================================================================C
  1371. C Return to calling program                                            C
  1372. C======================================================================C
  1373. C
  1374. 9999    Continue
  1375.     Return
  1376.     End
  1377. C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1378.     Subroutine Plot ( ptln, Error, Ierr )
  1379. C
  1380. C======================================================================C
  1381. C                                                                      C
  1382. C Purpose:                                                             C
  1383. C                                                                      C
  1384. C    This subprogram plots a lines worth of data onto the window.   C
  1385. C    The line type, line color, and symbol color variables are      C
  1386. C    incremented when needed.  These variables are saved so that    C
  1387. C    their values are not lost when the subroutine exits.           C
  1388. C    The SymbolDraw and Move/Draw subprogram calls are flagged so   C
  1389. C    that different type of plots can be drawn: line only, symbol   C
  1390. C    only, or line and symbols.                                     C
  1391. C                                                                      C
  1392. C======================================================================C
  1393. C                                                                      C
  1394. C Variables Definitions:                                               C
  1395. C                                                                      C
  1396. C Integer*2                                                            C
  1397. C    w_line - The bit pattern for the three line drawing types      C
  1398. C                                                                      C
  1399. C Integer                                                              C
  1400. C    i - Do loop variable                                           C
  1401. C    color - The pallet number of the current color to draw         C
  1402. C    Xpix - The X pixel position as calculated                      C
  1403. C    Ypix - The Y pixel position as calculated                      C
  1404. C    linenum - The current index into w_line to determine which     C
  1405. C        line type to draw                                      C
  1406. C    ptln - The current number of the line in the data to draw      C
  1407. C    index - The index into the X and Y data                        C
  1408. C    symbol - The current symbol number being drawn                 C
  1409. C    Error - The returned error number (0 if no error)              C
  1410. C                                                                      C
  1411. C Integer*4                                                            C
  1412. C    Ierr - The error return value to print with error              C
  1413. C                                                                      C
  1414. C Real                                                                 C
  1415. C    constx - Temporary storage for the Xpix calculation            C
  1416. C    consty1 - Temporary storage for the Ypix calculation           C
  1417. C    consty2 - Temporary storage for the Ypix calcualtion           C
  1418. C                                                                      C
  1419. C Logical                                                              C
  1420. C    First - Determination if this is the first time in this        C
  1421. C        subprogram                                             C
  1422. C                                                                      C
  1423. C Save                                                                 C
  1424. C    color, First, linenum, index, symbol                           C
  1425. C                                                                      C
  1426. C======================================================================C
  1427. C                                                                      C
  1428. C Error Recovery:                                                      C
  1429. C                                                                      C
  1430. C    Error = 1 => SymbolDraw Error - symbol number passed not valid C
  1431. C                                                                      C
  1432. C======================================================================C
  1433. C
  1434.     Implicit none
  1435. C
  1436. C======================================================================C
  1437. C Include files                                                        C
  1438. C======================================================================C
  1439. C
  1440.     Include include:graph.inc
  1441.     Include include:plotdata.inc
  1442. C
  1443. C======================================================================C
  1444. C Integer*2 variables                                                  C
  1445. C======================================================================C
  1446. C
  1447.     Integer*2
  1448.      1    w_line(3)
  1449. C
  1450. C======================================================================C
  1451. C Integer variables                                                    C
  1452. C======================================================================C
  1453. C
  1454.     Integer
  1455.      1    i, color, Xpix, Ypix, linenum, ptln, index, symbol
  1456. C
  1457. C======================================================================C
  1458. C Real variables                                                       C
  1459. C======================================================================C
  1460. C
  1461.     Real
  1462.      1    constx, consty1, consty2
  1463. C
  1464. C======================================================================C
  1465. C Logical variables                                                    C
  1466. C======================================================================C
  1467. C
  1468.     Logical
  1469.      1    First
  1470. C
  1471. C======================================================================C
  1472. C Error handling variables                                             C
  1473. C======================================================================C
  1474. C
  1475.     Integer Error
  1476.     Integer*4 Ierr
  1477. C
  1478. C======================================================================C
  1479. C Saved variables                                                      C
  1480. C======================================================================C
  1481. C
  1482.     Save
  1483.      1    color, First, linenum, index, symbol
  1484. C
  1485. C======================================================================C
  1486. C Data statements                                                      C
  1487. C======================================================================C
  1488. C
  1489.     Data
  1490.      1    First / .true. /,
  1491.      2    w_line / b'1111 1111 1111 1111',
  1492.      3         b'1111 0000 1111 0000',
  1493.      4         b'1100 1100 1100 1100' /
  1494. C
  1495. C**********************************************************************C
  1496. C Start of program                                                     C
  1497. C**********************************************************************C
  1498. C
  1499. C======================================================================C
  1500. C If this is the first call to this subprogram, then                   C
  1501. C   Find the first color and line to use on the plot                   C
  1502. C======================================================================C
  1503. C
  1504.     If ( First .eq. .true. ) Then
  1505.         First = .false.
  1506.         color = 1
  1507.         linenum = 1
  1508.         index = 0
  1509.         symbol = 1
  1510.     End If
  1511. C
  1512. C======================================================================C
  1513. C Set up the drawing pen color                                         C
  1514. C======================================================================C
  1515. C
  1516.     Call amiga ( SetAPen, RP, color )
  1517. C
  1518. C======================================================================C
  1519. C Place the line pattern into the proper data structure                C
  1520. C======================================================================C
  1521. C
  1522.     word ( RP + 34 ) = w_line(linenum)
  1523.     word ( RP + 32 ) = word ( RP + 32 ) .or. FRST_DOT
  1524. C
  1525. C======================================================================C
  1526. C Calculate constants needed for the line                              C
  1527. C======================================================================C
  1528. C
  1529.     constx  = float ( w_w - p_roff - p_loff ) / ( MaxX - MinX )
  1530.     consty1 = float ( p_toff + p_boff - w_h ) / ( MaxY - MinY )
  1531.     consty2 = float ( w_h - p_boff )
  1532. C
  1533. C======================================================================C
  1534. C Increment the pointer into the data plotting structure               C
  1535. C======================================================================C
  1536. C
  1537.     index = index + 1
  1538. C
  1539. C======================================================================C
  1540. C Adjust data plotting values if necessary                             C
  1541. C======================================================================C
  1542. C
  1543.     If ( xtype .eq. LOG ) Then
  1544.         X(index) = alog10(X(index))
  1545.     End If
  1546.     If ( ytype .eq. LOG ) Then
  1547.         Y(index) = alog10(Y(index))
  1548.     End If
  1549. C
  1550. C======================================================================C
  1551. C Calculate the pixel positions of the first point                     C
  1552. C======================================================================C
  1553. C
  1554.     Xpix = int ( float(p_loff) + ( ( X(index) - MinX ) * constx  ) )
  1555.     Ypix = int ( consty2       + ( ( Y(index) - MinY ) * consty1 ) )
  1556. C
  1557. C======================================================================C
  1558. C Draw the rest of the line                                            C
  1559. C======================================================================C
  1560. C
  1561.     Do ( i = 2, pts(ptln) )
  1562. C
  1563. C======================================================================C
  1564. C Draw the current symbol if necessary                                 C
  1565. C======================================================================C
  1566. C
  1567.         If ( symdraw .eq. YES ) Then
  1568.             Call SymbolDraw ( symbol, Xpix, Ypix,
  1569.      1                        Error, Ierr )
  1570.             If ( Error .ne. 0 ) Then
  1571.                 Go To 9999
  1572.             End If
  1573.         End If
  1574. C
  1575. C======================================================================C
  1576. C Move to the current position calculated if necessary                 C
  1577. C======================================================================C
  1578. C
  1579.         If ( linedraw .eq. YES ) Then
  1580.             Call amiga ( Move, RP, Xpix, Ypix )
  1581.         End If
  1582. C
  1583. C======================================================================C
  1584. C Increment the point into the data plotting structure                 C
  1585. C======================================================================C
  1586. C
  1587.         index = index + 1
  1588. C
  1589. C======================================================================C
  1590. C Adjust the data values if necessary                                  C
  1591. C======================================================================C
  1592. C
  1593.         If ( xtype .eq. LOG ) Then
  1594.             X(index) = alog10(X(index))
  1595.         End If
  1596.         If ( ytype .eq. LOG ) Then
  1597.             Y(index) = alog10(Y(index))
  1598.         End If
  1599. C
  1600. C======================================================================C
  1601. C Calculate the new positions of the the data point                    C
  1602. C======================================================================C
  1603. C
  1604.         Xpix = int ( float(p_loff) + ((X(index)-MinX)*constx) )
  1605.         Ypix = int ( consty2       + ((Y(index)-MinY)*consty1) )
  1606. C
  1607. C======================================================================C
  1608. C Set up the current line symbol                                       C
  1609. C======================================================================C
  1610. C
  1611.         word ( RP + 34 ) = w_line(linenum)
  1612.         word ( RP + 32 ) = word ( RP + 32 ) .or. FRST_DOT
  1613. C
  1614. C======================================================================C
  1615. C Draw the line                                                        C
  1616. C======================================================================C
  1617. C
  1618.         If ( linedraw .eq. YES ) Then
  1619.             Call amiga ( Draw, RP, Xpix, Ypix )
  1620.         End If
  1621. C
  1622. C======================================================================C
  1623. C End of loop over all points in the line                              C
  1624. C======================================================================C
  1625. C
  1626.     End Do
  1627. C
  1628. C======================================================================C
  1629. C Draw the last symbol if necessary                                    C
  1630. C======================================================================C
  1631. C
  1632.     If ( symdraw .eq. YES ) Then
  1633.         Call SymbolDraw ( symbol, Xpix, Ypix, Error, Ierr )
  1634.         If ( Error .ne. 0 ) Then
  1635.             Go To 9999
  1636.         End If
  1637.     End If
  1638. C
  1639. C======================================================================C
  1640. C Increment the line number and the color number for the next line.    C
  1641. C  Only increment the line draw type if the symbols are not being      C
  1642. C  drawn, otherwise the screen is too clutered to see the lines.       C
  1643. C======================================================================C
  1644. C
  1645.     color = color + 1
  1646.     If ( color .ge. gridline ) Then
  1647.         color = 1
  1648.         If ( symdraw .eq. NO ) Then
  1649.             linenum = linenum + 1
  1650.             If ( linenum .gt. 3 ) Then
  1651.                 linenum = 1
  1652.             End If
  1653.         End If
  1654.     End If
  1655. C
  1656. C======================================================================C
  1657. C Increment the symbol number on every pass                            C
  1658. C======================================================================C
  1659. C
  1660.     symbol = symbol + 1
  1661.     If ( symbol .gt. 4 ) Then
  1662.         symbol = 1
  1663.     End If
  1664. C
  1665. C======================================================================C
  1666. C Return to calling program                                            C
  1667. C======================================================================C
  1668. C
  1669. 9999    Continue
  1670.     Return
  1671.     End
  1672. C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1673.     Subroutine LinTickMark ( Axis, max, min, oticks, Error, Ierr )
  1674. C
  1675. C======================================================================C
  1676. C                                                                      C
  1677. C Purpose:                                                             C
  1678. C                                                                      C
  1679. C    This subprogram determines the position of the tick marks to   C
  1680. C    be drawn on the screen.  This subprogram also determines the   C
  1681. C    values associated with those tick marks.  This algorithm is    C
  1682. C    setup for LINEAR type tick marks and expands the axis width    C
  1683. C    to accomodate the nearest magnitude.                           C
  1684. C                                                                      C
  1685. C======================================================================C
  1686. C                                                                      C
  1687. C Variables Definitions:                                               C
  1688. C                                                                      C
  1689. C Real                                                                 C
  1690. C    max - The maximum data value to use to calculate the relation  C
  1691. C        between the pixel value and the data value.            C
  1692. C    min - The minimum data vlaue to use to calculate the relation  C
  1693. C        between the pixel value and the data value.            C
  1694. C    v_Ran - The data value range or domain depending on the axis.  C
  1695. C    v_Mag - The magnitude used to normalize the range or domain.   C
  1696. C    check - The tick mark numbers to check.                        C
  1697. C    tcheck - A temporary tick marks check value.                   C
  1698. C    v_pix - Temporary real pixel values.                           C
  1699. C    dval - The delta data value between tick marks.                C
  1700. C    dpix - the delta number of pixels per tick mark.               C
  1701. C                                                                      C
  1702. C Integer*4                                                            C
  1703. C    Ierr - The error return value.                                 C
  1704. C                                                                      C
  1705. C Integer                                                              C
  1706. C    Axis - The axis value number.                                  C
  1707. C    p_Ran - The pixel range value.                                 C
  1708. C    i - Do loop index variable.                                    C
  1709. C    ticks - The number of tick marks generated from each check     C
  1710. C        against the optimum number of tick marks wanted.       C
  1711. C    opt_ticks - The optimum number of tick marks.                  C
  1712. C    set - The index into the winning tick mark check.              C
  1713. C    oticks - The output number of tick marks.                      C
  1714. C    Error - The return error value.                                C
  1715. C                                                                      C
  1716. C======================================================================C
  1717. C                                                                      C
  1718. C Error Recovery:                                                      C
  1719. C                                                                      C
  1720. C    Error = 4 => Tick mark number generation algorithm failed.     C
  1721. C    Error = 5 => Invalid axis value.                               C
  1722. C    Error = 7 => Number of tick marks greater than MAXVAL.         C
  1723. C                                                                      C
  1724. C======================================================================C
  1725. C
  1726.     Implicit None
  1727. C
  1728. C======================================================================C
  1729. C Include files                                                        C
  1730. C======================================================================C
  1731. C
  1732.     Include include:plotdata.inc
  1733. C
  1734. C======================================================================C
  1735. C Real Variables                                                       C
  1736. C======================================================================C
  1737. C
  1738.     Real
  1739.      1    max, min, v_Ran, v_Mag, check(3), tcheck(3), dval,
  1740.      2    v_pix(0:MAXVAL), dpix
  1741. C
  1742. C======================================================================C
  1743. C Integer Variables                                                    C
  1744. C======================================================================C
  1745. C
  1746.     Integer
  1747.      1    Axis, p_Ran, i, ticks(3), opt_ticks, set, oticks
  1748. C
  1749. C======================================================================C
  1750. C Error handling variables                                             C
  1751. C======================================================================C
  1752. C
  1753.     Integer Error
  1754.     Integer*4 Ierr
  1755. C
  1756. C======================================================================C
  1757. C Data statements                                                      C
  1758. C======================================================================C
  1759. C
  1760.     Data
  1761.      1    check / 1.0, 2.0, 5.0 /
  1762. C
  1763. C**********************************************************************C
  1764. C Start of program                                                     C
  1765. C**********************************************************************C
  1766. C
  1767. C======================================================================C
  1768. C Calculates the range and magnitude range of the maxmimum and minimum C
  1769. C  data points                                                         C
  1770. C======================================================================C
  1771. C
  1772.     v_Ran = max - min
  1773.     v_Mag = 10.0 ** ( int(alog10(v_Ran)) )
  1774. C
  1775. C======================================================================C
  1776. C If the data is within one magnitude, then go on - no adjustment      C
  1777. C  needed                                                              C
  1778. C======================================================================C
  1779. C
  1780.     If ( v_Mag .eq. 0 ) Then
  1781.         Go To 1000
  1782.     End If
  1783. C
  1784. C======================================================================C
  1785. C Adjust the maximum and minimum value                                 C
  1786. C======================================================================C
  1787. C
  1788.     min = user_min * min / v_Mag
  1789.     If ( min .lt. 0.0 ) Then
  1790.         min = float ( int(min-0.99999) ) * v_Mag / user_min
  1791.     Else
  1792.         min = float ( int(min        ) ) * v_Mag / user_min
  1793.     End If
  1794. C
  1795.     max = user_max * max / v_Mag
  1796.     If ( max .lt. 0.0 ) Then
  1797.         max = float ( int(max        ) ) * v_Mag / user_max
  1798.     Else
  1799.         max = float ( int(max+0.99999) ) * v_Mag / user_max
  1800.     End If
  1801. C
  1802. C======================================================================C
  1803. C Store the new maximum and minimum values into common                 C
  1804. C======================================================================C
  1805. C
  1806. 1000    Continue
  1807.     If ( Axis .eq. XAXIS ) Then
  1808.         MaxX = max
  1809.         MinX = min
  1810.     Else If ( Axis .eq. YAXIS ) Then
  1811.         MaxY = max
  1812.         MinY = min
  1813.     Else
  1814.         Error = 5
  1815.         Ierr = Axis
  1816.         Go To 9999
  1817.     End If
  1818. C
  1819. C======================================================================C
  1820. C Write output to console - user refinement purposes                   C
  1821. C======================================================================C
  1822. C
  1823.     Write ( *, * ) 'Subroutine LinTickMark:'
  1824.     If ( Axis .eq. XAXIS ) Then
  1825.         Write( *, * )'   Linear Tick Mark Generation for X axis'
  1826.     Else If ( Axis .eq. YAXIS ) Then
  1827.         Write( *, * )'   Linear Tick Mark Generation for Y axis'
  1828.     Else
  1829.         Error = 5
  1830.         Ierr = Axis
  1831.         Go To 9999
  1832.     End If
  1833.     Write ( *, 100 ) '   New Max and Min values = ', max, ', ', min
  1834. C
  1835. C======================================================================C
  1836. C Find the pixel range                                                 C
  1837. C======================================================================C
  1838. C
  1839.     If ( Axis .eq. XAXIS ) Then
  1840.         p_Ran = w_w - p_loff - p_roff + 1
  1841.     Else If ( Axis .eq. YAXIS ) Then
  1842.         p_Ran = w_h - p_boff - p_toff + 1
  1843.     Else
  1844.         Error = 5
  1845.         Ierr = Axis
  1846.         Go To 9999
  1847.     End If
  1848. C
  1849. C======================================================================C
  1850. C Find the new maximum and minimum range and magnitude values          C
  1851. C======================================================================C
  1852. C
  1853.     v_Ran = max - min
  1854.     v_Mag = 10.0 ** ( nint(alog10(v_Ran)) - 1 )
  1855. C
  1856. C======================================================================C
  1857. C Set the optimum number of tick marks wanted                          C
  1858. C======================================================================C
  1859. C
  1860.     opt_ticks = 10
  1861. C
  1862. C======================================================================C
  1863. C Determine the number of tick marks close to the optimum value        C
  1864. C======================================================================C
  1865. C
  1866.     Do ( i = 1, 3 )
  1867.         tcheck(i) = check(i) * v_Mag
  1868.         ticks(i) = nint ( v_Ran / tcheck(i) )
  1869.         If ( opt_ticks .ge. ticks(i) ) Then
  1870.             set = i
  1871.             Go To 2000
  1872.         End If
  1873.     End Do
  1874.     Error = 4
  1875.     Go To 9999
  1876. C
  1877. C======================================================================C
  1878. C Check values of ticks and set up the value of the output value       C
  1879. C======================================================================C
  1880. C
  1881. 2000    Continue
  1882.     If ( ticks(set) .gt. MAXVAL ) Then
  1883.         Error = 7
  1884.         Ierr = ticks(set)
  1885.         Go To 9999
  1886.     End If
  1887.     oticks = ticks(set)
  1888. C
  1889. C======================================================================C
  1890. C Find the data values and pixel values determined from the above      C
  1891. C  analysis to draw the grid marks and tick marks                      C
  1892. C======================================================================C
  1893. C
  1894.     dval = v_Ran / ticks(set)
  1895.     values(0) = min
  1896.     If ( Axis .eq. XAXIS ) Then
  1897.         pixels(0) = p_loff
  1898.         v_pix(0) = float(pixels(0))
  1899.         dpix = float(p_Ran) / float(ticks(set))
  1900.     Else If ( Axis .eq. YAXIS ) Then
  1901.         pixels(0) = w_h - p_boff
  1902.         v_pix(0) = float(pixels(0))
  1903.         dpix = - float(p_Ran) / float(ticks(set))
  1904.     Else
  1905.         Error = 5
  1906.         Ierr = Axis
  1907.         Go To 9999
  1908.     End If
  1909.     Do ( i = 1, ticks(set) )
  1910.         values(i) = values(i-1) + dval
  1911.         v_pix(i)  = v_pix(i-1)  + dpix
  1912.         pixels(i) = int ( v_pix(i) )
  1913.     End Do
  1914. C
  1915. C======================================================================C
  1916. C Draw tick marks                                                      C
  1917. C======================================================================C
  1918. C
  1919.     Call DrawTicks ( Axis, ticks(set), Error, Ierr )
  1920.     If ( Error .ne. 0 ) Then
  1921.         Go To 9999
  1922.     End If
  1923. C
  1924. C======================================================================C
  1925. C Format Statements                                                    C
  1926. C======================================================================C
  1927. C
  1928. 100    Format ( a, 1pe15.6, a, 1pe15.6 )
  1929. C
  1930. C======================================================================C
  1931. C Return to calling program                                            C
  1932. C======================================================================C
  1933. C
  1934. 9999    Continue
  1935.     Return
  1936.     End
  1937. C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1938.     Subroutine LogTickMark ( Axis, max, min, oticks, Error, Errval )
  1939. C
  1940. C======================================================================C
  1941. C                                                                      C
  1942. C Purpose:                                                             C
  1943. C                                                                      C
  1944. C    This subprogram determines the position of the tick marks to   C
  1945. C    be drawn on the screen.  This subprogram also determines the   C
  1946. C    values associated with those tick marks.  This algorithm is    C
  1947. C    setup for LOG type tick marks and expands the axis width       C
  1948. C    to accomodate the nearest magnitude.                           C
  1949. C                                                                      C
  1950. C======================================================================C
  1951. C                                                                      C
  1952. C Variables Definitions:                                               C
  1953. C                                                                      C
  1954. C Real*4                                                               C
  1955. C    Rerr - The real return error value                             C
  1956. C                                                                      C
  1957. C Real                                                                 C
  1958. C    max - The new maximum data value.                              C
  1959. C    min - The new minimum data value.                              C
  1960. C    adj_min - The new adjusted minimum value.                      C
  1961. C    adj_max - The new adjusted maximum value.                      C
  1962. C    log_max - The log10 of adj_max.                                C
  1963. C    log_min - The log10 of adj_min.                                C
  1964. C    dval - The delta data value used to calculate the tick marks.  C
  1965. C    const - A constant used in pixel tick mark data generation.    C
  1966. C    temp1 - A constant used in pixel tick mark data generation.    C
  1967. C    temp2 - A constant used in pixel tick mark data generation.    C
  1968. C                                                                      C
  1969. C Integer*1                                                            C
  1970. C    Errval - A equivalenced returned error value.                  C
  1971. C    Ierrval - A equivalenced returned error value.                 C
  1972. C                                                                      C
  1973. C Integer*4                                                            C
  1974. C    Ierr - The integer returned error value.                       C
  1975. C                                                                      C
  1976. C Integer                                                              C
  1977. C    Axis - The current axis value.                                 C
  1978. C    i - Do loop index variable.                                    C
  1979. C    j - Do loop index variable.                                    C
  1980. C    ticks - The number of tick marks being drawn.                  C
  1981. C    v_Ranlog - The range or domain of the log10 of the max and min C
  1982. C    indx - A pointer into the values array.                        C
  1983. C    oticks - The output number of tick marks calculated.           C
  1984. C    Error - The error return value.                                C
  1985. C                                                                      C
  1986. C======================================================================C
  1987. C                                                                      C
  1988. C Error Recovery:                                                      C
  1989. C                                                                      C
  1990. C    Error = 1 => The data values are too small to be used.         C
  1991. C    Error = 2 => The data values are too large to be used.         C
  1992. C    Error = 5 => Invalid axis value passed.                        C
  1993. C    Error = 7 => Too many tick marks calculated for memeory.       C
  1994. C                                                                      C
  1995. C======================================================================C
  1996. C
  1997.     Implicit None
  1998. C
  1999. C======================================================================C
  2000. C Include files                                                        C
  2001. C======================================================================C
  2002. C
  2003.     Include include:plotdata.inc
  2004. C
  2005. C======================================================================C
  2006. C Real Variables                                                       C
  2007. C======================================================================C
  2008. C
  2009.     Real
  2010.      1    max, min, adj_min, adj_max, log_max, log_min, dval, const,
  2011.      2    temp1, temp2
  2012. C
  2013. C======================================================================C
  2014. C Integer Variables                                                    C
  2015. C======================================================================C
  2016. C
  2017.     Integer
  2018.      1    Axis, i, j, ticks, v_Ranlog, indx, oticks
  2019. C
  2020. C======================================================================C
  2021. C Error handling variables                                             C
  2022. C======================================================================C
  2023. C
  2024.     Integer Error
  2025.     Integer*4 Ierr
  2026.     Real*4 Rerr
  2027.     Integer*1 Errval(4), Ierrval(4)
  2028.     Equivalence ( Rerr, Ierr ), ( Ierrval(1), Ierr )
  2029. C
  2030. C**********************************************************************C
  2031. C Start of program                                                     C
  2032. C**********************************************************************C
  2033. C
  2034. C======================================================================C
  2035. C Find the minimum range for the data                                  C
  2036. C======================================================================C
  2037. C
  2038.     Do ( i = SEXP, LEXP )
  2039.         If ( ( min .lt. (10.0**(i+1)) )  .and.
  2040.      1             ( min .ge. (10.0**(i  )) )  ) Then
  2041.             adj_min = 10.0 ** (i)
  2042.             Go To 500
  2043.         End If
  2044.     End Do
  2045.     Error = 1
  2046.     Rerr = min
  2047.     Go To 9999
  2048. C
  2049. C======================================================================C
  2050. C Find the maximum range for the data                                  C
  2051. C======================================================================C
  2052. C
  2053. 500    Continue
  2054.     Do ( i = SEXP, LEXP )
  2055.         If ( ( max .le. (10.0**(i+1)) )  .and.
  2056.      1             ( max .ge. (10.0**(i  )) )  ) Then
  2057.             adj_max = 10.0 ** (i+1)
  2058.             Go To 1000
  2059.         End If
  2060.     End Do
  2061.     Error = 2
  2062.     Rerr = max
  2063.     Go To 9999
  2064. C
  2065. C======================================================================C
  2066. C Find the maximum and minimum log values                              C
  2067. C======================================================================C
  2068. C
  2069. 1000    Continue
  2070.     log_max = alog10 ( adj_max )
  2071.     log_min = alog10 ( adj_min )
  2072. C
  2073. C======================================================================C
  2074. C Find the new range to the nearest integer                            C
  2075. C======================================================================C
  2076. C
  2077.     v_Ranlog = nint ( log_max ) - nint ( log_min )
  2078. C
  2079. C======================================================================C
  2080. C Store these values in the common area                                C
  2081. C======================================================================C
  2082. C
  2083.     If ( Axis .eq. XAXIS ) Then
  2084.         MaxX = log_max
  2085.         MinX = log_min
  2086.     Else If ( Axis .eq. YAXIS ) Then
  2087.         MaxY = log_max
  2088.         MinY = log_min
  2089.     Else
  2090.         Error = 5
  2091.         Ierr = Axis
  2092.         Go To 9999
  2093.     End If
  2094. C
  2095. C======================================================================C
  2096. C Write output to console - user refinement purposes                   C
  2097. C======================================================================C
  2098. C
  2099.     Write ( *, * ) 'Subroutine LogTickMark:'
  2100.     If ( Axis .eq. XAXIS ) Then
  2101.         Write ( *, * ) '   Log Tick Mark Generation for X axis'
  2102.     Else If ( Axis .eq. YAXIS ) Then
  2103.         Write ( *, * ) '   Log Tick Mark Generation for Y axis'
  2104.     Else
  2105.         Error = 5
  2106.         Ierr = Axis
  2107.         Go To 9999
  2108.     End If
  2109.     Write ( *, 100 ) '   New Max and Min values = ', adj_max, ', ',
  2110.      1             adj_min
  2111. C
  2112. C======================================================================C
  2113. C Find the number of tickmarks and reject if larger than the size of   C
  2114. C  data arrays used below                                              C
  2115. C======================================================================C
  2116. C
  2117.     ticks = 9 * v_Ranlog
  2118.     If ( ticks .gt. MAXVAL ) Then
  2119.         Error = 7
  2120.         Ierr = ticks
  2121.         Go To 9999
  2122.     End If
  2123. C
  2124. C======================================================================C
  2125. C Set up the output value                                              C
  2126. C======================================================================C
  2127. C
  2128.     oticks = ticks
  2129. C
  2130. C======================================================================C
  2131. C Find the data values for display                                     C
  2132. C======================================================================C
  2133. C
  2134.     values(0) = adj_min
  2135.     Do ( i = 1, ticks/9 )
  2136.         dval = values((i-1)*9)
  2137.         Do ( j = 1, 9 )
  2138.             indx = ( i - 1 ) * 9 + j
  2139.             values(indx) = dval + ( float(j) * dval )
  2140.         End Do
  2141.     End Do
  2142. C
  2143. C======================================================================C
  2144. C Find the pixel values for display                                    C
  2145. C======================================================================C
  2146. C
  2147.     temp1 = alog10 ( values(0) )
  2148.     temp2 = alog10 ( values(ticks) )
  2149.     If ( Axis .eq. XAXIS ) Then
  2150.         pixels(0) = p_loff
  2151.         const = float (w_w-p_loff-p_roff) / (temp2-temp1)
  2152.     Else If ( Axis .eq. YAXIS ) Then
  2153.         pixels(0) = w_h - p_boff
  2154.         const = float (p_toff+p_boff-w_h) / (temp2-temp1)
  2155.     Else
  2156.         Error = 5
  2157.         Ierr = Axis
  2158.         Go To 9999
  2159.     End If
  2160. C
  2161.     Do ( i = 1, ticks )
  2162.         pixels(i) = int ( float(pixels(0)) +
  2163.      1            ( (alog10(values(i))-temp1) * const ) )
  2164.     End Do
  2165. C
  2166. C======================================================================C
  2167. C Draw tick marks                                                      C
  2168. C======================================================================C
  2169. C
  2170.     Call DrawTicks ( Axis, ticks, Error, Ierr )
  2171.     If ( Error .ne. 0 ) Then
  2172.         Go To 9999
  2173.     End If
  2174. C
  2175. C======================================================================C
  2176. C Setup error value output                                             C
  2177. C======================================================================C
  2178. C
  2179. 9999    Continue
  2180.     If ( Error .ne. 0 ) Then
  2181.         Do ( i = 1, 4 )
  2182.             Errval(i) = Ierrval(i)
  2183.         End Do
  2184.     End If
  2185. C
  2186. C======================================================================C
  2187. C Format Statements                                                    C
  2188. C======================================================================C
  2189. C
  2190. 100    Format ( a, 1pe15.6, a, 1pe15.6 )
  2191. C
  2192. C======================================================================C
  2193. C Return to calling program                                            C
  2194. C======================================================================C
  2195. C
  2196.     Return
  2197.     End
  2198. C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2199.     Subroutine DataRead ( filename, Error, Ierr )
  2200. C
  2201. C======================================================================C
  2202. C                                                                      C
  2203. C Purpose:                                                             C
  2204. C                                                                      C
  2205. C    This subprogram reads the input data file to determine the     C
  2206. C    plot specific parameters and plotting data.  It does some      C
  2207. C    data verification, but not much.  Could be updated.            C
  2208. C                                                                      C
  2209. C======================================================================C
  2210. C                                                                      C
  2211. C Variables Definitions:                                               C
  2212. C                                                                      C
  2213. C Integer*4                                                            C
  2214. C    Ierr - The error return value.                                 C
  2215. C                                                                      C
  2216. C Integer                                                              C
  2217. C    type - The type of plot wanted by the user. Broken down into   C
  2218. C        plot axis type here.                                   C
  2219. C    index - A pointer into the data arrays.                        C
  2220. C    i - Loop index variable.                                       C
  2221. C    Error - The error number.                                      C
  2222. C                                                                      C
  2223. C Character                                                            C
  2224. C    filename - The data file name.  Input through command line.    C
  2225. C                                                                      C
  2226. C======================================================================C
  2227. C                                                                      C
  2228. C Error Recovery:                                                      C
  2229. C                                                                      C
  2230. C    Error = 1 => filname does not exist                            C
  2231. C    Error = 2 => Greater than MAXPAIRS data pairs.                 C
  2232. C    Error = 3 => One data pair for the current line.               C
  2233. C    Error = 4 => Greater than MAXPAIRS/2 lines                     C
  2234. C    Error = 5 => Plot type is not valid                            C
  2235. C                                                                      C
  2236. C======================================================================C
  2237. C
  2238.     Implicit none
  2239. C
  2240. C======================================================================C
  2241. C Include files                                                        C
  2242. C======================================================================C
  2243. C
  2244.     Include include:plotdata.inc
  2245. C
  2246. C======================================================================C
  2247. C Integer variables                                                    C
  2248. C======================================================================C
  2249. C
  2250.     Integer
  2251.      1    type, index, i
  2252. C
  2253. C======================================================================C
  2254. C Character variables                                                  C
  2255. C======================================================================C
  2256. C
  2257.     Character
  2258.      1    filename*(*)
  2259. C
  2260. C======================================================================C
  2261. C Error handling variables                                             C
  2262. C======================================================================C
  2263. C
  2264.     Integer Error
  2265.     Integer*4 Ierr
  2266. C
  2267. C**********************************************************************C
  2268. C Start of program                                                     C
  2269. C**********************************************************************C
  2270. C
  2271. C======================================================================C
  2272. C Open data file                                                       C
  2273. C======================================================================C
  2274. C
  2275.     Open ( unit=10, file=filename, status='old',
  2276.      1        err=9900, iostat=Ierr )
  2277.     Go To 1000
  2278. 9900    Continue
  2279.     Error = 1
  2280.     Go To 9999
  2281. 1000    Continue
  2282. C
  2283. C======================================================================C
  2284. C Read initial data from data file                                     C
  2285. C======================================================================C
  2286. C
  2287.     Read ( unit=10, fmt=* ) s_h, s_w, w_h, w_w, w_tit, x_lab, 
  2288.      1    y_lab, lefoff, rigoff, topoff, botoff, lefpt, rigpt, toppt,
  2289.      2    botpt, user_max, user_min, grid, type, symdraw, linedraw, dsep
  2290. C
  2291. C======================================================================C
  2292. C Put a null character on the window title - a remnit from C strings   C
  2293. C======================================================================C
  2294. C
  2295.     w_tit(80:80) = char(0)
  2296. C
  2297. C======================================================================C
  2298. C Validate input                                                       C
  2299. C======================================================================C
  2300. C
  2301.     If ( type .eq. LINEAR ) Then
  2302.         xtype = LINEAR
  2303.         ytype = LINEAR
  2304.     Else If ( type .eq. LOG ) Then
  2305.         xtype = LOG
  2306.         ytype = LOG
  2307.     Else If ( type .eq. SEMILOG ) Then
  2308.         xtype = LINEAR
  2309.         ytype = LOG
  2310.     Else
  2311.         Error = 5
  2312.         Ierr = type
  2313.         Go To 9999
  2314.     End If
  2315. C
  2316. C======================================================================C
  2317. C Initialize linear arrays to dsep                                     C
  2318. C======================================================================C
  2319. C
  2320. C    Do ( i = 1, MAXPAIRS )
  2321. C        X(i) = dsep
  2322. C        Y(i) = dsep
  2323. C    End Do
  2324. C
  2325. C======================================================================C
  2326. C Top of read loop                                                     C
  2327. C======================================================================C
  2328. C
  2329.     line = 1
  2330.     index = 1
  2331. 5000    Continue
  2332. C
  2333. C======================================================================C
  2334. C Read all of the data in the file                                     C
  2335. C  Data seperated by a (dsep,dsep) data pair                           C
  2336. C======================================================================C
  2337. C
  2338.     pts(line) = 1
  2339.     Read ( unit=10, fmt=*, end=6000 ) X(index), Y(index)
  2340. C
  2341.     Do While ( X(index) .gt. dsep  .and.  Y(index) .gt. dsep  )
  2342.         pts(line) = pts(line) + 1
  2343.         index = index + 1
  2344.         If ( index .gt. MAXPAIRS ) Then
  2345.             Error = 2
  2346.             Ierr = MAXPAIRS
  2347.             Close ( unit=10 )
  2348.             Go To 9999
  2349.         End If
  2350.         Read ( unit=10, fmt=* ) X(index), Y(index)
  2351.     End Do
  2352. C
  2353. C======================================================================C
  2354. C Read data complete, take off (dsep,dsep) data pair                   C
  2355. C======================================================================C
  2356. C
  2357.     pts(line) = pts(line) - 1
  2358. C
  2359. C======================================================================C
  2360. C Check to see if there is more than one point                         C
  2361. C======================================================================C
  2362. C
  2363.     If ( pts(line) .le. 1 ) Then
  2364.         Error = 3
  2365.         Ierr = line
  2366.         Close ( unit=10 )
  2367.         Go To 9999
  2368.     End If
  2369. C
  2370. C======================================================================C
  2371. C Increment line number                                                C
  2372. C======================================================================C
  2373. C
  2374.     Write ( *, 100 ) line, pts(line)
  2375.     line = line + 1
  2376.     If ( line .gt. MAXPAIRS/2 ) Then
  2377.         Error = 4
  2378.         Ierr = MAXPAIRS/2
  2379.         Close(unit=10)
  2380.         Go To 9999
  2381.     End If
  2382. C
  2383. C======================================================================C
  2384. C Go to top of read data loop                                          C
  2385. C======================================================================C
  2386. C
  2387.     Go To 5000
  2388. C
  2389. C======================================================================C
  2390. C Close the data file                                                  C
  2391. C======================================================================C
  2392. C
  2393. 6000    Continue
  2394.     Close ( unit=10 )
  2395. C
  2396. C======================================================================C
  2397. C Decrement the line number for the last line                          C
  2398. C======================================================================C
  2399. C
  2400.     line = line - 1
  2401. C
  2402. C======================================================================C
  2403. C Format statements                                                    C
  2404. C======================================================================C
  2405. C
  2406. 100    Format ( 'Finished reading data for line ', i3.3, ' with the ',
  2407.      1         'number of points = ', i4.4 )
  2408. C
  2409. C======================================================================C
  2410. C Return to calling program                                            C
  2411. C======================================================================C
  2412. C
  2413. 9999    Continue
  2414.     Return
  2415.     End
  2416. C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2417.     Subroutine MaxMin ( Error, Ierr )
  2418. C
  2419. C======================================================================C
  2420. C                                                                      C
  2421. C Purpose:                                                             C
  2422. C                                                                      C
  2423. C    To find the maximum and minimum X and Y values that are used   C
  2424. C    in various subprograms in this task.                           C
  2425. C                                                                      C
  2426. C======================================================================C
  2427. C                                                                      C
  2428. C Variables Definitions:                                               C
  2429. C                                                                      C
  2430. C Integer*4                                                            C
  2431. C    Ierr - The return error value.                                 C
  2432. C                                                                      C
  2433. C Integer                                                              C
  2434. C    i - Do loop variable.                                          C
  2435. C    j - Do loop variable.                                          C
  2436. C    index - Pointer into data arrays.                              C
  2437. C    Error - The error return value.                                C
  2438. C                                                                      C
  2439. C======================================================================C
  2440. C                                                                      C
  2441. C Error Recovery:                                                      C
  2442. C                                                                      C
  2443. C    No error check                                                 C
  2444. C                                                                      C
  2445. C======================================================================C
  2446. C
  2447.     Implicit None
  2448. C
  2449. C======================================================================C
  2450. C Include files                                                        C
  2451. C======================================================================C
  2452. C
  2453.     Include include:plotdata.inc
  2454. C
  2455. C======================================================================C
  2456. C Integer variables                                                    C
  2457. C======================================================================C
  2458. C
  2459.     Integer
  2460.      1    i, j, index
  2461. C
  2462. C======================================================================C
  2463. C Error handling variables                                             C
  2464. C======================================================================C
  2465. C
  2466.     Integer Error
  2467.     Integer*4 Ierr
  2468. C
  2469. C**********************************************************************C
  2470. C Start of program                                                     C
  2471. C**********************************************************************C
  2472. C
  2473. C======================================================================C
  2474. C Set up the smallest values                                           C
  2475. C======================================================================C
  2476. C
  2477.     MaxX = X(1)
  2478.     MaxY = Y(1)
  2479.     MinX = X(1)
  2480.     MinY = Y(1)
  2481. C
  2482. C======================================================================C
  2483. C Find the maximum and minimum values                                  C
  2484. C======================================================================C
  2485. C
  2486.     index = 0
  2487. C
  2488. C======================================================================C
  2489. C Loop over all values                                                 C
  2490. C======================================================================C
  2491. C
  2492.     Do ( i = 1, line )
  2493. C
  2494.         Do ( j = 1, pts(i) )
  2495. C
  2496. C======================================================================C
  2497. C Increment the index into the data structures                         C
  2498. C======================================================================C
  2499. C
  2500.             index = index + 1
  2501. C
  2502. C======================================================================C
  2503. C Find the maximum X value                                             C
  2504. C======================================================================C
  2505. C
  2506.             If ( X(index) .gt. MaxX ) Then
  2507.                 MaxX = X(index)
  2508.             End If
  2509. C
  2510. C======================================================================C
  2511. C Find the minimum X value                                             C
  2512. C======================================================================C
  2513. C
  2514.             If ( X(index) .lt. MinX ) Then
  2515.                 MinX = X(index)
  2516.             End If
  2517. C
  2518. C======================================================================C
  2519. C Find the maximum Y value                                             C
  2520. C======================================================================C
  2521. C
  2522.             If ( Y(index) .gt. MaxY ) Then
  2523.                 MaxY = Y(index)
  2524.             End If
  2525. C
  2526. C======================================================================C
  2527. C Find the minimum Y value                                             C
  2528. C======================================================================C
  2529. C
  2530.             If ( Y(index) .lt. MinY ) Then
  2531.                 MinY = Y(index)
  2532.             End If
  2533. C
  2534.         End Do
  2535.     End Do
  2536. C
  2537. C======================================================================C
  2538. C Write output to the console - user refinement purposes               C
  2539. C======================================================================C
  2540. C
  2541.     Write ( *, * ) 'Subroutine MaxMin:'
  2542.     Write ( *, * ) '    Data MaxX, MinX, MaxY, MinY = ',
  2543.      1        MaxX, MinX, MaxY, MinY
  2544. C
  2545. C======================================================================C
  2546. C Return to calling program                                            C
  2547. C======================================================================C
  2548. C
  2549.     Return
  2550.     End
  2551. C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2552.     Subroutine ScrnDepth ( Error, Ierr )
  2553. C
  2554. C======================================================================C
  2555. C                                                                      C
  2556. C Purpose:                                                             C
  2557. C                                                                      C
  2558. C    This subprogram determines the screen depth needed to hold     C
  2559. C    all the lines -- up to the maximum allowed anyway.             C
  2560. C                                                                      C
  2561. C======================================================================C
  2562. C                                                                      C
  2563. C Variables Definitions:                                               C
  2564. C                                                                      C
  2565. C Integer                                                              C
  2566. C    Error - The error return value.                                C
  2567. C                                                                      C
  2568. C Integer*4                                                            C
  2569. C    Ierr - The return error value.                                 C
  2570. C                                                                      C
  2571. C======================================================================C
  2572. C                                                                      C
  2573. C Error Recovery:                                                      C
  2574. C                                                                      C
  2575. C    No error check                                                 C
  2576. C                                                                      C
  2577. C======================================================================C
  2578. C
  2579.     Implicit None
  2580. C
  2581. C======================================================================C
  2582. C Include files                                                        C
  2583. C======================================================================C
  2584. C
  2585.     Include include:plotdata.inc
  2586. C
  2587. C======================================================================C
  2588. C Error variables                                                      C
  2589. C======================================================================C
  2590. C
  2591.     Integer Error
  2592.     Integer*4 Ierr
  2593. C
  2594. C**********************************************************************C
  2595. C Start of program                                                     C
  2596. C**********************************************************************C
  2597. C
  2598. C======================================================================C
  2599. C Find the number of bit plans                                         C
  2600. C======================================================================C
  2601. C
  2602.     s_d = int ( alog10(float(line)) / alog10(2.0) ) + 1
  2603. C
  2604. C======================================================================C
  2605. C If it is only one, set it to two so grid lines can be drawn in a     C
  2606. C  different color, etc....                                            C
  2607. C======================================================================C
  2608. C
  2609.     If ( s_d .le. 1 ) Then
  2610.         s_d = 2
  2611.     End If
  2612. C
  2613. C======================================================================C
  2614. C The maximum bit planes allowed for low resolution is 5 and the       C
  2615. C  maximum bit planes for high resolution is 4                         C
  2616. C======================================================================C
  2617. C
  2618.     If ( s_w .gt. 320 ) Then
  2619.         If ( s_d .gt. 4 ) Then
  2620.             s_d = 4
  2621.         End If
  2622.     Else If ( s_w .le. 320 ) Then
  2623.         If ( s_d .gt. 5 ) Then
  2624.             s_d = 5
  2625.         End If
  2626.     End If
  2627. C
  2628. C======================================================================C
  2629. C Return to calling program                                            C
  2630. C======================================================================C
  2631. C
  2632. 9999    Continue
  2633.     Return
  2634.     End
  2635. C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2636.     Subroutine SymbolDraw ( symbol, Xpix, Ypix, Error, Ierr )
  2637. C
  2638. C======================================================================C
  2639. C                                                                      C
  2640. C Purpose:                                                             C
  2641. C                                                                      C
  2642. C    This draws the symbol on the data point.  The symbol number    C
  2643. C    is passed from the calling program.  The (X,Y) pixel data      C
  2644. C    is passed from the calling program.                            C
  2645. C                                                                      C
  2646. C======================================================================C
  2647. C                                                                      C
  2648. C Variables Definitions:                                               C
  2649. C                                                                      C
  2650. C Integer*2                                                            C
  2651. C    w_line - The line pattern to draw the symbol with.             C
  2652. C                                                                      C
  2653. C Integer                                                              C
  2654. C    symbol - The symbol number passed from the calling program.    C
  2655. C    Xpix - The X pixel value of the data point.                    C
  2656. C    Ypix - The Y pixel value of the data point.                    C
  2657. C    Error - The error return value.                                C
  2658. C                                                                      C
  2659. C Integer*4                                                            C
  2660. C    Ierr - The return error value.                                 C
  2661. C                                                                      C
  2662. C======================================================================C
  2663. C                                                                      C
  2664. C Error Recovery:                                                      C
  2665. C                                                                      C
  2666. C    Error = 1 => Invalid symbol number                             C
  2667. C                                                                      C
  2668. C======================================================================C
  2669. C
  2670.     Implicit None
  2671. C
  2672. C======================================================================C
  2673. C Include files                                                        C
  2674. C======================================================================C
  2675. C
  2676.     Include include:graph.inc
  2677.     Include include:plotdata.inc
  2678. C
  2679. C======================================================================C
  2680. C Integer*2 variables                                                  C
  2681. C======================================================================C
  2682. C
  2683.     Integer*2
  2684.      1    w_line
  2685. C
  2686. C======================================================================C
  2687. C Integer variables                                                    C
  2688. C======================================================================C
  2689. C
  2690.     Integer
  2691.      1    symbol, Xpix, Ypix
  2692. C
  2693. C======================================================================C
  2694. C Error variables                                                      C
  2695. C======================================================================C
  2696. C
  2697.     Integer Error
  2698.     Integer*4 Ierr
  2699. C
  2700. C======================================================================C
  2701. C Data statements                                                      C
  2702. C======================================================================C
  2703. C
  2704.     Data
  2705.      1    w_line / b'1111 1111 1111 1111' /
  2706. C
  2707. C**********************************************************************C
  2708. C Start of program                                                     C
  2709. C**********************************************************************C
  2710. C
  2711. C======================================================================C
  2712. C Setup line type                                                      C
  2713. C======================================================================C
  2714. C
  2715.     word ( RP + 34 ) = w_line
  2716.     word ( RP + 32 ) = word ( RP + 32 ) .or. FRST_DOT
  2717. C
  2718. C======================================================================C
  2719. C Determine which symbol to draw: 1 - plus sign                        C
  2720. C======================================================================C
  2721. C
  2722.     If ( symbol .eq. 1 ) Then
  2723. C
  2724. C======================================================================C
  2725. C Draw symbol - plus sign                                              C
  2726. C======================================================================C
  2727. C
  2728.         Call amiga ( Move, RP, Xpix,         Ypix-SYMSIZE )
  2729.         Call amiga ( Draw, RP, Xpix,         Ypix+SYMSIZE )
  2730.         Call amiga ( Move, RP, Xpix-SYMSIZE, Ypix         )
  2731.         Call amiga ( Draw, RP, Xpix+SYMSIZE, Ypix         )
  2732. C
  2733. C======================================================================C
  2734. C Determine which symbol to draw: 2 - cross                            C
  2735. C======================================================================C
  2736. C
  2737.     Else If ( symbol .eq. 2 ) Then
  2738. C
  2739. C======================================================================C
  2740. C Draw symbol - cross                                                  C
  2741. C======================================================================C
  2742. C
  2743.         Call amiga ( Move, RP, Xpix-SYMSIZE, Ypix-SYMSIZE )
  2744.         Call amiga ( Draw, RP, Xpix+SYMSIZE, Ypix+SYMSIZE )
  2745.         Call amiga ( Move, RP, Xpix-SYMSIZE, Ypix+SYMSIZE )
  2746.         Call amiga ( Draw, RP, Xpix+SYMSIZE, Ypix-SYMSIZE )
  2747. C
  2748. C======================================================================C
  2749. C Determine which symbol to draw: 3 - box                              C
  2750. C======================================================================C
  2751. C
  2752.     Else If ( symbol .eq. 3 ) Then
  2753. C
  2754. C======================================================================C
  2755. C Draw symbol - box                                                    C
  2756. C======================================================================C
  2757. C
  2758.         Call amiga ( Move, RP, Xpix-SYMSIZE, Ypix-SYMSIZE )
  2759.         Call amiga ( Draw, RP, Xpix-SYMSIZE, Ypix+SYMSIZE )
  2760.         Call amiga ( Draw, RP, Xpix+SYMSIZE, Ypix+SYMSIZE )
  2761.         Call amiga ( Draw, RP, Xpix+SYMSIZE, Ypix-SYMSIZE )
  2762.         Call amiga ( Draw, RP, Xpix-SYMSIZE, Ypix-SYMSIZE )
  2763. C
  2764. C======================================================================C
  2765. C Determine which symbol to draw: 4 - diamond                          C
  2766. C======================================================================C
  2767. C
  2768.     Else If ( symbol .eq. 4 ) Then
  2769. C
  2770. C======================================================================C
  2771. C Draw symbol - diamond                                                C
  2772. C======================================================================C
  2773. C
  2774.         Call amiga ( Move, RP, Xpix,         Ypix-SYMSIZE )
  2775.         Call amiga ( Draw, RP, Xpix-SYMSIZE, Ypix         )
  2776.         Call amiga ( Draw, RP, Xpix,         Ypix+SYMSIZE )
  2777.         Call amiga ( Draw, RP, Xpix+SYMSIZE, Ypix         )
  2778.         Call amiga ( Draw, RP, Xpix,         Ypix-SYMSIZE )
  2779. C
  2780. C======================================================================C
  2781. C Invalid symbol value                                                 C
  2782. C======================================================================C
  2783. C
  2784.     Else
  2785. C
  2786. C======================================================================C
  2787. C Set error flag and return                                            C
  2788. C======================================================================C
  2789. C
  2790.         Error = 1
  2791.         Ierr = symbol
  2792.         Go To 9999
  2793. C
  2794. C======================================================================C
  2795. C End of if                                                            C
  2796. C======================================================================C
  2797. C
  2798.     End If
  2799. C
  2800. C======================================================================C
  2801. C Return to calling program                                            C
  2802. C======================================================================C
  2803. C
  2804. 9999    Continue
  2805.     Return
  2806.     End
  2807. C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2808.     Subroutine DrawTicks ( Axis, ticks, Error, Ierr )
  2809. C
  2810. C======================================================================C
  2811. C                                                                      C
  2812. C Purpose:                                                             C
  2813. C                                                                      C
  2814. C    This subprogram draws the tick marks on the screen.  The axis  C
  2815. C    number of tick marks are passed from the calling program.      C
  2816. C                                                                      C
  2817. C======================================================================C
  2818. C                                                                      C
  2819. C Variables Definitions:                                               C
  2820. C                                                                      C
  2821. C Integer                                                              C
  2822. C    Axis - The axis number.                                        C
  2823. C    ticks - The number of tick marks to draw.                      C
  2824. C    i - Do loop index variable.                                    C
  2825. C    Error - The error return value.                                C
  2826. C                                                                      C
  2827. C Integer*4                                                            C
  2828. C    Ierr - The return error value.                                 C
  2829. C                                                                      C
  2830. C======================================================================C
  2831. C                                                                      C
  2832. C Error Recovery:                                                      C
  2833. C                                                                      C
  2834. C    Error = 5 => Invalid axis passed to this subprogram.           C
  2835. C                                                                      C
  2836. C======================================================================C
  2837. C
  2838.     Implicit None
  2839. C
  2840. C======================================================================C
  2841. C Include files                                                        C
  2842. C======================================================================C
  2843. C
  2844.     Include include:graph.inc
  2845.     Include include:plotdata.inc
  2846. C
  2847. C======================================================================C
  2848. C Integer variables                                                    C
  2849. C======================================================================C
  2850. C
  2851.     Integer
  2852.      1    Axis, ticks, i
  2853. C
  2854. C======================================================================C
  2855. C Error variables                                                      C
  2856. C======================================================================C
  2857. C
  2858.     Integer Error
  2859.     Integer*4 Ierr
  2860. C
  2861. C**********************************************************************C
  2862. C Start of program                                                     C
  2863. C**********************************************************************C
  2864. C
  2865. C======================================================================C
  2866. C Determine if the X axis is the current axis                          C
  2867. C======================================================================C
  2868. C
  2869.     If ( Axis .eq. XAXIS ) Then
  2870. C
  2871. C======================================================================C
  2872. C If it is, loop over all the tick marks                               C
  2873. C======================================================================C
  2874. C
  2875.         Do ( i = 0, ticks )
  2876. C
  2877. C======================================================================C
  2878. C Draw the tick mark                                                   C
  2879. C======================================================================C
  2880. C
  2881.             Call amiga (Move,RP,pixels(i),w_h-botoff     )
  2882.             Call amiga (Draw,RP,pixels(i),w_h-botoff+TKMK)
  2883. C
  2884. C======================================================================C
  2885. C End of loop                                                          C
  2886. C======================================================================C
  2887. C
  2888.         End Do
  2889. C
  2890. C======================================================================C
  2891. C If the current axis is the Y axis                                    C
  2892. C======================================================================C
  2893. C
  2894.     Else If ( Axis .eq. YAXIS ) Then
  2895. C
  2896. C======================================================================C
  2897. C If it is, loop over all the tick marks                               C
  2898. C======================================================================C
  2899. C
  2900.         Do ( i = 0, ticks )
  2901. C
  2902. C======================================================================C
  2903. C Draw the tick mark                                                   C
  2904. C======================================================================C
  2905. C
  2906.             Call amiga ( Move, RP, lefoff,      pixels(i) )
  2907.             Call amiga ( Draw, RP, lefoff-TKMK, pixels(i) )
  2908. C
  2909. C======================================================================C
  2910. C End of loop                                                          C
  2911. C======================================================================C
  2912. C
  2913.         End Do
  2914. C
  2915. C======================================================================C
  2916. C If the axis is not the X or the Y axis                               C
  2917. C======================================================================C
  2918. C
  2919.     Else
  2920. C
  2921. C======================================================================C
  2922. C Signal an error                                                      C
  2923. C======================================================================C
  2924. C
  2925.         Error = 5
  2926.         Ierr = Axis
  2927.         Go To 9999
  2928. C
  2929.     End If
  2930. C
  2931. C======================================================================C
  2932. C Return to calling program                                            C
  2933. C======================================================================C
  2934. C
  2935. 9999    Continue
  2936.     Return
  2937.     End
  2938. C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2939.     Subroutine DrawLabels ( Axis, ticks, pltype, Error, Ierr )
  2940. C
  2941. C======================================================================C
  2942. C                                                                      C
  2943. C Purpose:                                                             C
  2944. C                                                                      C
  2945. C    This subprogram draws the labels on the screen.  The axis,     C
  2946. C    number of tick marks, and plottype are passed from the calling C
  2947. C    program.                                                       C
  2948. C                                                                      C
  2949. C======================================================================C
  2950. C                                                                      C
  2951. C Variables Definitions:                                               C
  2952. C                                                                      C
  2953. C Integer*4                                                            C
  2954. C    Ierr - The integer error return value.                         C
  2955. C                                                                      C
  2956. C Integer                                                              C
  2957. C    x_modval - The modulus value used to determine if to draw a    C
  2958. C        label or not for the X axis.                           C
  2959. C    y_modval - The modulus value used to determine if to draw a    C
  2960. C        label or not for the Y axis.                           C
  2961. C    i - Do loop index variable.                                    C
  2962. C    Axis - The current axis being manipulated.                     C
  2963. C    ticks - The number of tick marks in the data arrays.           C
  2964. C    pltype - The plot type being drawn.                            C
  2965. C    tempx - A temporary storage location.                          C
  2966. C    tempy - A temporary storage location.                          C
  2967. C    Error - The return error value.                                C
  2968. C                                                                      C
  2969. C Character                                                            C
  2970. C    c_val - The character string that holds the label.             C
  2971. C                                                                      C
  2972. C======================================================================C
  2973. C                                                                      C
  2974. C Error Recovery:                                                      C
  2975. C                                                                      C
  2976. C    Error = 5 => Invalid axis type.                                C
  2977. C    Error = 8 => Invalid plot type.                                C
  2978. C                                                                      C
  2979. C======================================================================C
  2980. C
  2981.     Implicit None
  2982. C
  2983. C======================================================================C
  2984. C Include files                                                        C
  2985. C======================================================================C
  2986. C
  2987.     Include include:graph.inc
  2988.     Include include:plotdata.inc
  2989. C
  2990. C======================================================================C
  2991. C Integer variables                                                    C
  2992. C======================================================================C
  2993. C
  2994.     Integer
  2995.      1    x_modval, y_modval, i, Axis, ticks, pltype, tempx, tempy
  2996. C
  2997. C======================================================================C
  2998. C Character variables                                                  C
  2999. C======================================================================C
  3000. C
  3001.     Character
  3002.      1    c_val*10
  3003. C
  3004. C======================================================================C
  3005. C Error variables                                                      C
  3006. C======================================================================C
  3007. C
  3008.     Integer Error
  3009.     Integer*4 Ierr
  3010. C
  3011. C**********************************************************************C
  3012. C Start of program                                                     C
  3013. C**********************************************************************C
  3014. C
  3015. C======================================================================C
  3016. C Determine the spacing of the value labels                            C
  3017. C======================================================================C
  3018. C
  3019.     If ( pltype .eq. LINEAR ) Then
  3020.         x_modval = 2
  3021.         y_modval = 1
  3022.     Else If ( pltype .eq. LOG ) Then
  3023.         x_modval = 9
  3024.         y_modval = 9
  3025.     Else
  3026.         Error = 8
  3027.         Ierr = pltype
  3028.         Go To 9999
  3029.     End If
  3030. C
  3031. C======================================================================C
  3032. C Loop over all tick marks                                             C
  3033. C======================================================================C
  3034. C
  3035.     Do ( i = 0, ticks )
  3036. C
  3037. C======================================================================C
  3038. C If the current axis is the X axis                                    C
  3039. C======================================================================C
  3040. C
  3041.         If ( Axis .eq. XAXIS ) Then
  3042. C
  3043. C======================================================================C
  3044. C Determine if this is one of the ones to write                        C
  3045. C======================================================================C
  3046. C
  3047.             If ( mod(i,x_modval) .eq. 0 ) Then
  3048. C
  3049. C======================================================================C
  3050. C Convert the binary number to a character string                      C
  3051. C======================================================================C
  3052. C
  3053.                 Write ( c_val, 100 ) values(i)
  3054. C
  3055. C======================================================================C
  3056. C Draw the label on the screen                                         C
  3057. C======================================================================C
  3058. C
  3059.                 tempx = pixels(i) - 40
  3060.                 tempy = w_h - botoff + 15
  3061.                 Call amiga ( Move, RP, tempx, tempy )
  3062.                 Call amiga ( Text, RP, c_val, 10 )
  3063. C
  3064.             End If
  3065. C
  3066. C======================================================================C
  3067. C If the current axis is the Y axis                                    C
  3068. C======================================================================C
  3069. C
  3070.         Else If ( Axis .eq. YAXIS ) Then
  3071. C
  3072. C======================================================================C
  3073. C Determine if this is one of the ones to label                        C
  3074. C======================================================================C
  3075. C
  3076.             If ( mod(i,y_modval) .eq. 0 ) Then
  3077. C
  3078. C======================================================================C
  3079. C Convert the binary number to a character string                      C
  3080. C======================================================================C
  3081. C
  3082.                 Write ( c_val, 100 ) values(i)
  3083. C
  3084. C======================================================================C
  3085. C Draw the label on the plot                                           C
  3086. C======================================================================C
  3087. C
  3088.                 Call amiga ( Move, RP, 0, pixels(i)+4 )
  3089.                 Call amiga ( Text, RP, c_val, 10 )
  3090. C
  3091.             End If
  3092. C
  3093. C======================================================================C
  3094. C If the current axis is not the X or Y axis                           C
  3095. C======================================================================C
  3096. C
  3097.         Else
  3098. C
  3099. C======================================================================C
  3100. C Signal an error and return                                           C
  3101. C======================================================================C
  3102. C
  3103.             Error = 5
  3104.             Ierr = Axis
  3105.             Go To 9999
  3106. C
  3107.         End If
  3108. C
  3109.     End Do
  3110. C
  3111. C======================================================================C
  3112. C Format statements                                                    C
  3113. C======================================================================C
  3114. C
  3115. 100    Format ( SP, 1pe10.3 )        ! +n.nnnE+nn
  3116. C
  3117. C======================================================================C
  3118. C Return to calling program                                            C
  3119. C======================================================================C
  3120. C
  3121. 9999    Continue
  3122.     Return
  3123.     End
  3124. C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  3125.     Subroutine DrawGrid ( Axis, ticks, Error, Ierr )
  3126. C
  3127. C======================================================================C
  3128. C                                                                      C
  3129. C Purpose:                                                             C
  3130. C                                                                      C
  3131. C    This subprogram draws the grid lines on the screen.  The axis, C
  3132. C    and the number of tick marks corresponding to the number       C
  3133. C    of grid lines are passed from the calling program.             C
  3134. C                                                                      C
  3135. C======================================================================C
  3136. C                                                                      C
  3137. C Variables Definitions:                                               C
  3138. C                                                                      C
  3139. C Integer*2                                                            C
  3140. C    w_line - This is the line pattern used to draw the grid lines. C
  3141. C                                                                      C
  3142. C Integer                                                              C
  3143. C    i - Do loop index variable.                                    C
  3144. C    Axis - The current axis being manipulated.                     C
  3145. C    ticks - The number of tick marks and hence the number of       C
  3146. C        grid lines.                                            C
  3147. C    Error - The returned error value.                              C
  3148. C                                                                      C
  3149. C Integer*4                                                            C
  3150. C    Ierr - The error return value.                                 C
  3151. C                                                                      C
  3152. C======================================================================C
  3153. C                                                                      C
  3154. C Error Recovery:                                                      C
  3155. C                                                                      C
  3156. C    Error = 5 => Invalid Axis type.                                C
  3157. C                                                                      C
  3158. C======================================================================C
  3159. C
  3160.     Implicit None
  3161. C
  3162. C======================================================================C
  3163. C Include files                                                        C
  3164. C======================================================================C
  3165. C
  3166.     Include include:graph.inc
  3167.     Include include:plotdata.inc
  3168. C
  3169. C======================================================================C
  3170. C Integer*2 variables                                                  C
  3171. C======================================================================C
  3172. C
  3173.     Integer*2
  3174.      1    w_line(0:2)
  3175. C
  3176. C======================================================================C
  3177. C Integer variables                                                    C
  3178. C======================================================================C
  3179. C
  3180.     Integer
  3181.      1    i, Axis, ticks
  3182. C
  3183. C======================================================================C
  3184. C Error variables                                                      C
  3185. C======================================================================C
  3186. C
  3187.     Integer Error
  3188.     Integer*4 Ierr
  3189. C
  3190. C======================================================================C
  3191. C Data statements                                                      C
  3192. C======================================================================C
  3193. C
  3194.     Data
  3195.      1    w_line / b'1000 1000 1000 1000',
  3196.      2         b'1000 0000 1000 0000',
  3197.      3         b'1111 1111 1111 1111' /
  3198. C
  3199. C**********************************************************************C
  3200. C Start of program                                                     C
  3201. C**********************************************************************C
  3202. C
  3203. C======================================================================C
  3204. C Set the color to the gridline color                                  C
  3205. C======================================================================C
  3206. C
  3207.     Call amiga ( SetAPen, RP, gridline )
  3208. C
  3209. C======================================================================C
  3210. C Set the gridline line type                                           C
  3211. C======================================================================C
  3212. C
  3213.     word ( RP + 34 ) = w_line(Axis)
  3214.     word ( RP + 32 ) = word ( RP + 32 ) .or. FRST_DOT
  3215. C
  3216. C======================================================================C
  3217. C If this is the X axis                                                C
  3218. C======================================================================C
  3219. C
  3220.     If ( Axis .eq. XAXIS ) Then
  3221. C
  3222. C======================================================================C
  3223. C Then draw all the grid lines                                         C
  3224. C======================================================================C
  3225. C
  3226.         Do ( i = 0, ticks )
  3227.             Call amiga ( Move, RP, pixels(i), w_h-botoff )
  3228.             Call amiga ( Draw, RP, pixels(i), topoff     )
  3229.         End Do
  3230. C
  3231. C======================================================================C
  3232. C If this is the Y axis                                                C
  3233. C======================================================================C
  3234. C
  3235.     Else If ( Axis .eq. YAXIS ) Then
  3236. C
  3237. C======================================================================C
  3238. C Then draw all the grid lines                                         C
  3239. C======================================================================C
  3240. C
  3241.         Do ( i = 0, ticks )
  3242.             Call amiga ( Move, RP, lefoff,     pixels(i) )
  3243.             Call amiga ( Draw, RP, w_w-rigoff, pixels(i) )
  3244.         End Do
  3245. C
  3246. C======================================================================C
  3247. C If it is not the X or Y axis                                         C
  3248. C======================================================================C
  3249. C
  3250.     Else
  3251. C
  3252. C======================================================================C
  3253. C Signal the error                                                     C
  3254. C======================================================================C
  3255. C
  3256.         Error = 5
  3257.         Ierr = Axis
  3258.         Go To 9999
  3259. C
  3260.     End If
  3261. C
  3262. C======================================================================C
  3263. C Reset the line type to a solid line                                  C
  3264. C======================================================================C
  3265. C
  3266.     word ( RP + 34 ) = w_line(2)
  3267.     word ( RP + 32 ) = word ( RP + 32 ) .or. FRST_DOT
  3268. C
  3269. C======================================================================C
  3270. C Reset the color to white                                             C
  3271. C======================================================================C
  3272. C
  3273.     Call amiga ( SetAPen, RP, 1 )
  3274. C
  3275. C======================================================================C
  3276. C Return to the calling program                                        C
  3277. C======================================================================C
  3278. C
  3279. 9999    Continue
  3280.     Return
  3281.     End
  3282. C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  3283.     Subroutine DataGen ( Error, Ierr )
  3284. C
  3285. C======================================================================C
  3286. C                                                                      C
  3287. C Purpose:                                                             C
  3288. C                                                                      C
  3289. C    This subprogram generates data based on data file input.       C
  3290. C    So far this calculates the scale factor, but is not used.  It  C
  3291. C    also calculates the plotting borders against the plot borders. C
  3292. C                                                                      C
  3293. C======================================================================C
  3294. C                                                                      C
  3295. C Variables Definitions:                                               C
  3296. C                                                                      C
  3297. C Integer                                                              C
  3298. C    Error - The error return value.                                C
  3299. C                                                                      C
  3300. C Integer*4                                                            C
  3301. C    Ierr - The return error value.                                 C
  3302. C                                                                      C
  3303. C======================================================================C
  3304. C                                                                      C
  3305. C Error Recovery:                                                      C
  3306. C                                                                      C
  3307. C    No error check                                                 C
  3308. C                                                                      C
  3309. C======================================================================C
  3310. C
  3311.     Implicit None
  3312. C
  3313. C======================================================================C
  3314. C Include files                                                        C
  3315. C======================================================================C
  3316. C
  3317.     Include include:plotdata.inc
  3318. C
  3319. C======================================================================C
  3320. C Error variables                                                      C
  3321. C======================================================================C
  3322. C
  3323.     Integer Error
  3324.     Integer*4 Ierr
  3325. C
  3326. C**********************************************************************C
  3327. C Start of program                                                     C
  3328. C**********************************************************************C
  3329. C
  3330. C======================================================================C
  3331. C Determine the scale factor - y/x                                     C
  3332. C======================================================================C
  3333. C
  3334.     SF = w_h / w_w
  3335. C
  3336. C======================================================================C
  3337. C Determine plot size in relation to the axis size                     C
  3338. C======================================================================C
  3339. C
  3340.     p_loff = lefoff + lefpt
  3341.     p_roff = rigoff + rigpt
  3342.     p_toff = topoff + toppt
  3343.     p_boff = botoff + botpt
  3344. C
  3345. C======================================================================C
  3346. C Return to calling program                                            C
  3347. C======================================================================C
  3348. C
  3349. 9999    Continue
  3350.     Return
  3351.     End
  3352. C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  3353.